在 $or 中运行多个 geo $near 查询
Posted
技术标签:
【中文标题】在 $or 中运行多个 geo $near 查询【英文标题】:Running multiple geo $near queries inside an $or 【发布时间】:2014-07-04 12:34:30 【问题描述】:在查询 mongodb 数据库时,是否可以在 $or 语句中执行多个地理查询,例如 $near 或 $geoNear?
我总是收到错误“异常:$ 或可能不包含‘特殊’查询”
经过一番谷歌搜索后,我发现问题https://jira.mongodb.org/browse/SERVER-3984 已关闭并标记为“已修复”。
对我来说,运行多个地理查询时似乎仍然存在错误。 这是我的测试代码:
db.entry.find(
$or: [
"address.geo":
$near:
$geometry :
type : "Point" ,
coordinates : [ 9.7043 , 52.3019 ] ,
$maxDistance : 50000
,
"address.geo":
$near:
$geometry :
type : "Point" ,
coordinates : [ 9.6043 , 52.1019 ] ,
$maxDistance : 50000
]
).count();
这就是结果:
uncaught exception: count failed:
"errmsg" : "exception: $or may not contain 'special' query",
"code" : 13291,
"ok" : 0
【问题讨论】:
你用的是什么版本的mongodb? 由于我们仍处于评估阶段,我们处于最新版本 - 2.6.3 【参考方案1】:您不能在 $or 子句中使用 $near(或 $nearSphere):
$or 和地理空间查询
在 2.6 版中更改。
$or 支持地理空间子句,但以下例外: near 子句(near 子句包括 $nearSphere 和 $near)。 $或不能 包含与任何其他子句的近子句。
但是,您可以在 $or 中使用其他地理空间子句,因此如果您可以重构查询以使用不同的地理空间运算符,您将能够使用 $or。
【讨论】:
好的。但是哪一个?!我必须从中心位置查询给定半径内的条目。我唯一能弄清楚的是“$ geoWithin”。我遇到了同样的错误... :( 好的。我让它与 $geoWithin 和 $center 一起工作。不幸的是,对于 $circle,我可以提供一个名为“radius”的参数。这个半径单位不是米或公里,而是坐标系统中的单位。所以值为“1”的半径给了我比预期更大的半径。但这现在应该很容易了,因为我们没有为我们的地理信息使用球体。谢谢;) 没问题。测量单位是弧度,所以如果你想从英里或公里转换,你可以按照这里的指示:docs.mongodb.org/manual/tutorial/… @JohnPetrone 我想将我的位置与 startLocation、endLocation 和航点列表进行比较。我如何做到这一点?【参考方案2】:您不能在$or
子句和$and
子句中使用$near
(或$nearSphere
)。执行两次查询获取数据
【讨论】:
以上是关于在 $or 中运行多个 geo $near 查询的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose Geo Near Search - ???????????
如何针对具有多个合同的本地网络运行 Near-js-api 测试