【发布时间】:2014-02-18 19:26:53
【问题描述】:
我创建了一个支持地址预测的查询,类似于 Google 地方信息自动完成功能,其中输入字段将尝试通过查找集合中最近的匹配地址(基于地理 IP 位置)来预测输入的地址.
我的集合中的每个文档都包含一个地址字符串,以及地址的坐标,但并非每个文档都有地址或坐标。
该集合还包括如下创建的复合索引:
db.collection.ensureIndex({地址:1,坐标:“2dsphere”},{稀疏:真,背景:真});
我的问题是当我执行查询时,如果结果集包含一个具有地址字段但没有坐标字段的文档,我会收到以下错误:
{ $err: "字段类型错误 () 10 != 2", "code": 13111 }
10 为 null 的 BSON 类型,2 为字符串的 BSON 类型。
当存在复合索引时,MongoDB 的地理空间搜索不会跳过没有坐标的文档。 (使用简单索引可以很好地跳过它们。)我试图通过创建稀疏索引来解决这个问题,但稀疏选项仅适用于复合索引中的第一个字段。
是否有其他方法可以执行快速地理空间 $near 查询和/或创建仅包含所有索引字段都存在的文档的复合索引?
【问题讨论】:
-
添加一些不存在的协调 eq 0,000000 0,00000000 并在查询中执行 $or
标签: mongodb geospatial