【问题标题】:MongoDB geospatial query with $not使用 $not 的 MongoDB 地理空间查询
【发布时间】:2016-07-13 17:13:22
【问题描述】:

我有一个在 MongoDB 中运行良好的基本地理空间查询。似乎应该很容易应用 $not 来获得补充......但这对我不起作用。是简单的用户错误吗?或者 MongoDB 不能在概念上处理这个查询?我在documentation 中找不到任何此类限制。

工作查询(正确找到中心 10 英里内的 2 个城市):

db.customers.find({ "location" : { $within : { $center : [[-117.15,32.72],0.15] } } })

尝试补全查询(期望结果是 10 英里范围内的 1 个城市):

db.customers.find({ "location" : { $not : { $within : { $center : [[-117.15,32.72],0.15] } } } })
error: {
    "$err" : "missing geo field (location) in : {location: { $not: { $within: { $center: [ [ -117.15, 32.72 ], 0.15 ] } } } }",
    "code" : 13042
}

对于想要复制/粘贴查询以查看错误的任何人,这里有一小部分示例数据:

db.customers.ensureIndex( { "location" : "2d" } )
db.customers.save({"city":"La Mesa","state":"CA","location":[ -117.02,32.76 ]})
db.customers.save({"city":"Chula Vista","state":"CA","location":[ -117.08,32.63 ]})
db.customers.save({"city":"Mexico City","state":"Mexico","location":[-99.133244,19.4326]})

(我使用的是 MongoDB 1.8.2,以防万一。)

【问题讨论】:

标签: mongodb geospatial


【解决方案1】:

我认为这是不可能的。据我所知,位置查询会给你一个特殊的游标,它只能使用位置查询作为参数(例如$within)。

v. 2.0.1 给出了更具描述性的错误消息: error: { "$err" : "geo field only has 1 element", "code" : 13068 }

索引的问题在于,一般来说,否定是邪恶。大多数索引在您翻转它们时都无法很好地应对,因此即使您的查询有效,它也可能是不可取的,因为它可能必须进行表扫描。

我对此并不完全确定,向新闻组发送消息可能是个好主意。

【讨论】:

  • 是的,向新闻组发帖很有帮助。其他人也有类似的要求。支持 $or 和 $all 可能更有用(更少的 EVIL),但也不支持它们。此处要求改进:jira.mongodb.org/browse/SERVER-3984
  • 我喜欢 mongodb 预定截止日期:UTC 2012 年 12 月 31 日
猜你喜欢
  • 2015-06-07
  • 2019-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多