0
{ _id : ObjectId(...),
  name : "...",
  addresses : [ {
                 context : "home" ,
                 loc : [ 55.5, 42.3 ]
                } ,
                {
                 context : "office",
                 loc : [ -74 , 44.74 ]
                }
              ]
}

address.loc 是“2d”索引的。

我想编写一个查询,该查询应该为我提供 $near 某个位置且上下文为办公室的所有文档。

I wrote some thing like:
   db.coll.find({'address.loc':{$near:[lat,lng]}, 'address.context' : "office"});

上面的查询没有给我想要的结果。它在整个“地址”数组中搜索位置,然后在整个数组中搜索上下文。

我想搜索相同的数组位置和相同的上下文。我知道它可以通过 $elemMatch 来完成,但是当我尝试使用它时,它说没有可用的 2d 索引或 2dsphere 索引。

我是 MongoDB 新手,不知道应该如何编写查询。

4

1 回答 1

4

我已经尝试了该查询,它似乎可以按照您的意图使用 $elemMatch 运算符。我认为问题在于您的查询中有错字 where addressis used 而不是addresses. 您的查询应如下所示:

db.coll.find({ 'addresses.loc':{$near:[lat,lng]}, addresses: { $elemMatch: {context: "office"} } });
于 2013-09-17T14:46:51.590 回答