根据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
}
您认为我可以使用的任何解决方法?感谢
答案 0 :(得分:0)
不幸的是,从MongoDB 3.4.10开始,您发布的查询没有解决方法,因为地理查询被视为“特殊”查询,并且与其他查询的处理方式不同。目前,要实现您的需求,必须通过创建两个查询并将它们组合在应用程序中来手动完成。
话虽如此,我们要求提供此功能:https://jira.mongodb.org/browse/SERVER-13974。请对描述您的用例的故障单以及此功能对您很重要的原因进行评论/评论。