【问题标题】:Mongo - Query multiple locations at onceMongo - 一次查询多个位置
【发布时间】:2013-03-16 21:06:34
【问题描述】:

我目前正在尝试查找居住在任何位置列表中的所有用户(此位置列表可能很大,因此与服务器端的联合相比,执行多个查询不一定是理想的)。

例如,用例是查找居住在我当前城市的任何教堂 2 英里范围内的所有用户,并给出这些教堂的坐标列表。

现在,以下位置查询有效:

db.users.count( { location: { $within: { $centerSphere: [ [-84.330984, 33.8615], 2 / 3959  ] } } } )

还有:

db.users.count( {location : { $near : [ -84.330984 , 33.8615 ] , $maxDistance : 2 / 69 }  })

但是,我希望能够统计居住在不同位置的用户数量。即类似的东西:

db.users.count( { $or: [{ location: { $within: { $centerSphere: [ [-84.330984, 33.8615], 2 / 3959  ] } } },{ location: { $within: { $centerSphere: [ [-85.331122, 34.97832], 2 / 3959  ] } } } ] } )

现在,当我运行这个查询时,Mongo 给出了记录在案的错误:

Tue Mar 26 17:24:22 uncaught exception: count failed: {
"errmsg" : "exception: $or may not contain 'special' query",
"code" : 13291,
"ok" : 0
}

由于这个错误和开放的 JIRA 票证 (https://jira.mongodb.org/browse/SERVER-3984),Mongo 目前受限于使用 $or(或 $all)运算符执行多个位置查询,因此我无法链接位置查询。

是否有实现此目的的最佳做法或解决方法? 同样,我不希望每个位置都单独查询而不是将它们合并在一起;虽然我意识到这可能是唯一的选择。

我目前正在使用 Mongo 2.2.3,但如果升级到 2.4 可以解决这个难题,我不会遇到任何问题。

谢谢

【问题讨论】:

标签: mongodb geospatial mongodb-query


【解决方案1】:

如果你熟悉 javascript,你可以使用 mapReduce 来实现。

但是,需要构建 $near 和 $centerSphere 两种方法,并且不能执行超过 1000 条记录的 mapreduce。

由于 mongoDB 对 $or 运算符有限制,这是我想到解决这个问题的第一个想法。

http://docs.mongodb.org/manual/applications/map-reduce/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-15
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 2019-04-08
    • 1970-01-01
    相关资源
    最近更新 更多