我目前正在尝试查找居住在位置列表中的任何一个中的所有用户(此位置列表可能很大,因此与服务器端的联合相比,进行多个查询不一定是理想的)。
例如,用例是查找居住在我当前城市的任何教堂 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 可以解决这个难题,则没有问题。
谢谢