我有一个名为“ devices”的集合,其中包含大约50,000个文档。我正在尝试查询每个文档中的“ routes”数组,并在单个数组元素满足多个条件的情况下让它返回文档。问题在于,Mongo似乎在针对不同数组元素满足多个条件的情况下给出了答案。
样本数据:
{
"_id": 0,
"name": "example1",
"serial": "123456",
"routes": [
{
"description": "8989",
"zone": "front"
},
{
"description": "1221",
"zone": "back"
}
]
},
{
"_id": 1,
"name": "example2",
"serial": "987654",
"routes": [
{
"description": "1515",
"zone": "front"
},
{
"description": "8989",
"zone": "side"
}
]
}
我尝试了简单的.find()变体,没有运气,包括
db.devices.find({"routes.description":"8989", "routes.zone":"front"})
db.devices.find({"$and": [{"routes.description":"8989"}, {"routes.zone":"front"}]})
我也尝试过聚合,但是由于我对聚合的理解是基本的,因此聚合似乎失败了。以上查询的理想结果将是一个文档(“ _id”:0),而不是两个文档。
{ "_id" : 0, "name" : "example1", "serial" : "123456", "routes" : [ { "description" : "8989", "zone" : "front" }, { "description" : "1221", "zone" : "back" } ] }
此外,还需要能够使用$ in运算符查询数组。例如,以下查询的期望输出将是两个文档,因为它们都具有与列表中的“ zone”:“ front”和“ descriptions”相匹配的路由。
db.devices.find({"$and": [{"routes.description": { $in: ["8989", "1515"] }}, {"routes.zone":"front"}]})
答案 0 :(得分:0)
您只需要在此处使用$elemMatch
db.devices.find({routes: {$elemMatch: {description:"8989", zone:"front"}}})