如何使用或条件查询MongoID附近的查询

时间:2017-11-26 17:16:32

标签: mongodb geospatial

根据MongoID documentation,您无法使用或使用近乎查询。如果您希望在查询附近使用geo或条件,那么最佳替代方案是什么? 例如如果我想选择特定半径内的所有帖子或由我的朋友发布?

更新
我有一个包含这样的坐标数组的集合

{
    "_id" : ObjectId("5a1b08977ab79403d100000e"),
    "coordinates" : [ 
        103.8632025, 
        1.3079616
     ],
    "user_id" : ObjectId("5a0dc29a7ab7946a63000005"),
}

如果我执行近乎查询,即

db.getCollection('COLLECTION_NAME').find({"coordinates":{"$nearSphere":[103.863325, 1.308015], "$maxDistance":0.012630230737833089}})

它工作得非常好,但如果我想找到所有那些由这个用户创建或存在于坐标周围的记录,我尝试使用$或

连接两个查询
db.getCollection('COLLECTION_NAME').find({"$or": [{"coordinates":{"$nearSphere":[103.863325, 1.308015], "$maxDistance":0.012630230737833089}},{'user_id': ObjectId("5a0dc29a7ab7946a63000005")}] })

它响应错误

Error: error: {
  "waitedMS" : NumberLong(0),
  "ok" : 0,
  "errmsg" : "geoNear must be top-level expr",
  "code" : 2
}

您认为我可以使用的任何解决方法?感谢

1 个答案:

答案 0 :(得分:0)

不幸的是,从MongoDB 3.4.10开始,您发布的查询没有解决方法,因为地理查询被视为“特殊”查询,并且与其他查询的处理方式不同。目前,要实现您的需求,必须通过创建两个查询并将它们组合在应用程序中来手动完成。

话虽如此,我们要求提供此功能:https://jira.mongodb.org/browse/SERVER-13974。请对描述您的用例的故障单以及此功能对您很重要的原因进行评论/评论。