首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有稀疏复合索引错误13311的MongoDB $near地理空间查询

具有稀疏复合索引错误13311的MongoDB $near地理空间查询
EN

Stack Overflow用户
提问于 2014-01-27 19:16:59
回答 2查看 499关注 0票数 2

我已经创建了一个支持地址预测的查询,类似于,其中一个输入字段将试图通过在集合中找到最近的匹配地址(基于geo位置)来预测正在输入的地址。

我的集合中的每个文档都包含一个地址字符串,而地址的坐标并不是每个文档都有地址或坐标。

该集合还包括如下创建的复合索引:

db.collection.ensureIndex({地址: 1,坐标:"2dsphere“},{稀疏: true,背景: true });

我的问题是,当我执行查询时,如果结果集包含有address字段但没有坐标字段的文档,则会得到以下错误:

{ $err:“字段() 10 =2的错误类型”,“代码”:13111 }

10是null的BSON类型,2是字符串的BSON类型。

当有复合索引时,MongoDB的地理空间搜索不会跳过没有坐标的文档。(它使用一个简单的索引跳过它们。)我试图通过创建一个稀疏索引来解决这个问题,但是稀疏选项只适用于复合索引中的第一个字段。

是否有其他方法执行快速地理空间$near查询和/或创建只包含所有索引字段的文档的复合索引?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-03 16:50:08

在MongoDB 2.4中,2dsphere索引并不稀疏,并且不识别sparse:true索引修饰符。2dsphere geo索引中的所有文档都必须具有存在的geo字段。相比之下,在默认情况下,旧的2d索引是稀疏的(但不支持GeoJSON类型)。

在MongoDB 2.6.0-rc0中,随着"V2“(版本2) 2dsphere索引的引入,这种稀疏行为正在发生变化。如果您从MongoDB 2.4升级,现有的2dsphere索引将继续保持当前的"V1“行为,直到删除并重新创建这些索引为止。如果尝试将“稀疏”标志应用于2dsphere索引,也会出现记录在案的警告。

在V2 2dsphere索引中,如果文档缺少2dsphere索引字段(或者字段为null或空数组),则文档将被插入,但不会添加到2dsphere索引中。

有关更多信息,请参见SERVER-9639 (2dsphere indexes should be sparse on geo fields)中的MongoDB问题跟踪器。

票数 5
EN

Stack Overflow用户

发布于 2014-01-30 01:36:53

我查看了Userpassword的响应,并尝试了他推荐的内容。虽然不理想,但确实奏效了。

实际上,我用BSON定位点更新了丢失数据的记录:

代码语言:javascript
复制
loc: { type: 'Point', coordinates: [0, 0] }

再说一次,这在我的情况下也不太理想。但是,没有位置的数据现在被静默地忽略了,如果这种情况发生改变,我将返回它来清理它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21389648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档