gpt4 book ai didi

mongodb - 当所有 $ 和条件匹配同一个子文档时匹配的 MongoDB find()?

转载 作者:可可西里 更新时间:2023-11-01 09:31:19 28 4
gpt4 key购买 nike

如果我有一组如下所示的 MongoDB 文档,我该怎么做才能得到一个只返回拥有 2 只宠物的家庭的 find() 结果,这些宠物都喜欢肝脏?

这是我期望的工作:

db.delegation.find({pets:2, $and: [{'foods.liver': true}, {'foods.allLike': true}] })

这是文档集:

{
"_id" : ObjectId("5384888e380efca06276cf5e"),
"family": "smiths",
"pets": 2,
"foods" : [
{
"name" : "chicken",
"allLike" : true,
},
{
"name" : "liver",
"allLike" : false,
}
]
},
{
"_id" : ObjectId("4384888e380efca06276cf50"),
"family": "jones",
"pets": 2,
"foods" : [
{
"name" : "chicken",
"allLike" : true,
},
{
"name" : "liver",
"allLike" : true,
}
]
}

我最终得到的是两个家庭,因为他们都有至少一种食物标记为 allLike。如果任何食物子文档匹配,$and 中的两个条件似乎都为真,但我想要的是两个条件匹配成对的条件。

事实上,我让琼斯一家回来了(如我所愿),还有史密斯(我没有)。返回 Smith 是因为鸡肉子文档的 allLike 设置为 true,而肝脏子文档的名称为“liver”。这些条件在不同的食物子文档中匹配。我希望它们在食品文件中配对。

显然,这段代码不是真正的用例。我有一个,但我简化了它以保护无辜者......

最佳答案

这是 $elemMatch 运算符的理想用例,它匹配数组元素中的多个组件:

db.delegation.find({pets:2, foods: { $elemMatch: {name: 'liver', allLike: true}}})

另一方面,$and 运算符在这里不适用,因为它可以匹配数组的不同 元素。

关于mongodb - 当所有 $ 和条件匹配同一个子文档时匹配的 MongoDB find()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24187846/

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