如果我有一组如下所示的 MongoDB 文档,我该怎么做才能得到一个 find() 结果,它只返回有 2 只宠物都喜欢肝脏的家庭?
这是我期望的工作:
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 被返回是因为 chicken 子文档的 allLike 设置为 true,并且liver 子文档的名称为“liver”。这些条件在不同的食物子文档中匹配。我希望它们在食品文件上成对匹配。
显然,这段代码不是真正的用例。我有一个,但我已经简化了它以保护无辜者......