我创建了一个支持地址预测的查询,类似于Google商家信息自动填充,其中输入字段将尝试通过查找集合中最近的匹配地址(基于geo-ip-location)来预测输入的地址.
我的集合中的每个文档都包含一个地址字符串,而地址的坐标却不是每个文档都有地址或坐标.
该集合还包括如下创建的复合索引:
db.collection.ensureIndex({address:1,coordinates:"2dsphere"},{sparse:true,background:true});
我的问题是当我执行查询时,如果结果集包含一个具有地址字段但没有坐标字段的文档,我会收到以下错误:
{$ err:"字段的错误类型()10!= 2","code":13111}
10是用于null的BSON类型,2是用于字符串的BSON类型.
当存在复合索引时,MongoDB的地理空间搜索不会跳过没有坐标的文档.(它使用简单的索引跳过它们.)我试图通过创建稀疏索引来解决这个问题,但稀疏选项仅适用于复合索引中的第一个字段.
是否有另一种方法可以执行快速地理空间$ near查询和/或创建仅包含所有索引字段所在的文档的复合索引?