【问题标题】:MongoDB: geospatial query with additional conditionsMongoDB:带有附加条件的地理空间查询
【发布时间】:2013-08-29 20:04:40
【问题描述】:
{ _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 新手,不知道应该如何编写查询。

【问题讨论】:

    标签: mongodb mongoose geospatial


    【解决方案1】:

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

    db.coll.find({ 'addresses.loc':{$near:[lat,lng]}, addresses: { $elemMatch: {context: "office"} } });
    

    【讨论】:

    • 感谢 Philiq 的回复,但目前似乎不支持。上述查询将返回结果,但结果不正确。有几个使用 MongoDB 打开 SERVER-3325 的 JIRA 票证。我找不到其他人。没有错字,因为我得到了结果,但结果无效
    猜你喜欢
    • 1970-01-01
    • 2015-06-07
    • 2019-09-23
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多