{ _id : ObjectId(...),
name : "...",
addresses : [ {
context : "home" ,
loc : [ 55.5, 42.3 ]
} ,
{
context : "office",
loc : [ -74 , 44.74 ]
}
]
}
address.loc被索引为“2d”。
我想编写一个查询,该查询应该为我提供所有位于$附近的文档,并且上下文是办公室。
I wrote some thing like:
db.coll.find({'address.loc':{$near:[lat,lng]}, 'address.context' : "office"});
以上查询不会给我想要的结果。它在整个“地址”数组中搜索位置,然后在整个数组中搜索上下文。
我想搜索相同的数组位置和相同的上下文。我知道它可以通过$ elemMatch完成,但是当我尝试使用它时,它表示没有可用的2d索引或2dsphere索引。
我是MongoDB的新手,不知道应该如何编写查询。
答案 0 :(得分:4)
我已经尝试了查询,它似乎与你打算使用$ elemMatch运算符一样工作。我认为问题是您的查询中有一个拼写错误,其中address
代替addresses
。您的查询应如下所示:
db.coll.find({ 'addresses.loc':{$near:[lat,lng]}, addresses: { $elemMatch: {context: "office"} } });