我在mongodb上有这些类型的项目:
{
"_id": { "$oid" : "2" },
"waypoints": [
{
"step": 0,
"coordinates": [1,2]
},
{
"step": 1,
"coordinates": [1,3]
},
{
"step": 2,
"coordinates": [1,4]
}
]
}
我试图在集合中找到[1,2]以检索waypoints.step和_id,但结果不是我所期望的。
我想得到:
{
"_id": { "$oid" : "2" },
"waypoints": [
{
"step": 0
}
]
}
但我明白了:
{
"_id": { "$oid" : "2" },
"waypoints": [
{
"step": 0,
},
{
"step": 1,
},
{
"step": 2,
}
]
}
实现我想要的正确查询是什么?
我只知道坐标,我需要检索对象的_id和与我正在寻找的坐标对应的步骤。
感谢
答案 0 :(得分:1)
您可以通过投影数据来实现。查询应为:
db.collection.find({"_id": { "$oid" : "2" }},{waypoints : {$elemMatch : {coordinates:[1,2]}}})
有关详情,请查看$elemMatch运营商。
答案 1 :(得分:0)
因为您正在coordinates
进行搜索,所以您可以这样做:
db.test.find({'waypoints.coordinates': [1,2]}, {'waypoints.$': 1})
在投影中,$
表示找到坐标的waypoints
数组的索引。
您将获得coordinates
值以及step
,但这是您可以做的最好的事情:
{
"_id": "2",
"waypoints": [
{
"step": 0,
"coordinates": [
1,
2
]
}
]
}