gpt4 book ai didi

MongoDB:在其所有子文档中查找符合条件的文档

转载 作者:可可西里 更新时间:2023-11-01 09:12:22 25 4
gpt4 key购买 nike

我正在尝试编写一个 mongo 查询来获取满足其所有子文档条件的结果,

1. { 
"_id" : 1,
"data" : [
{
"Id" : "513",
"Nom" : "alouale pfouga",
}
],
"campaigns" : [
{
"user" : "1",
"latest" : NumberInt(0),
"postcode" : [
[

]
],
},
{
"user" : "2",
"latest" : NumberInt(1),
"postcode" : [
{
"id" : "772",
"name" : "xxx",
}
],

}
],

}

2. {
"_id" : 2,
"data" : [
{
"Id" : "514",
"Nom" : "pfouga remi",
}
],
"campaigns" : [
{
"user" : "1",
"latest" : NumberInt(0),
"postcode" : [
[

]
],
},
],

}

我需要找到“邮政编码”数组为空的记录。据我了解这样的查询:db.users.find({"campaigns.postcode":[]}) 给了我两条记录,但我只需要 record 2 ,因为 record 1 在一个子文档中有 postcode 节点,请任何人帮助我!!!

最佳答案

这会给你答案:

db.test.find({ 'campaigns.postcode': { $size: 0 } } )

但在您的情况下,'campaigns.postcode' 中有一个空数组,这意味着大小不是 0,而是 1

你应该删除你的空数组

"postcode" : [
[
]
],

应该是

"postcode" : []

更新:在问题上花了一些时间后我意识到了问题

要将 "postcode": [[]] 转换为 "postcode": [],您可以使用以下代码:

db.test.find({ 'campaigns.postcode': []} ).forEach(function(item){
for(var i0 = 0; i0 < item.campaigns.length; i0++)
{
if(item.campaigns[i0].postcode[0].length == []) item.campaigns[i0].postcode = [];
}

db.test.update({'_id' : item._id}, item);
});

之后,您可以通过以下方式找到正确的结果:

db.test.find({ 'campaigns.postcode': { $size: 0 }, 'campaigns': { $size: 1 } } )

关于MongoDB:在其所有子文档中查找符合条件的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27293186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com