1

我想通过使用以下命令来使用来自不同索引类型(2dsphere 和文本)的两个索引:

db.mycoll.createIndex({"@geolocationable":"2dsphere",name:"text"})

但我收到以下错误:

"errmsg" : "bad index key pattern { @geolocationable: \"2dsphere\", name: \"text\" }: 一个索引不能使用多个索引插件。"

我阅读了MongoDB 文本和 2D 复合索引 ,但我不确定为什么我不能在一个集合中创建 2dsphere 和文本索引。

我并不是说我想在一个查询中使用两个索引,而我想创建这个索引以便在单独的查询中单独使用它们

4

1 回答 1

0

编辑:修改以回答更新的问题。

如果要分别在查询中使用这两个字段,则可以创建 2 个不同的索引而不是复合索引。

地理空间指数:

db.mycoll.createIndex({"@geolocationable":"2dsphere"})

文字索引:

db.mycoll.createIndex({name:"text"})

此外,从文档中注意到

一个集合最多可以有一个文本索引。

创建复合索引时,文本索引不能与多索引或地理空间索引分组。这是一个复合索引限制。

文档

复合文本索引不能包含任何其他特殊索引类型,例如多键或地理空间索引字段。

但是,如果您不打算对字段执行不区分大小写的搜索name,则可以使用普通索引而不是文本索引创建复合索引。

db.mycoll.createIndex({"@geolocationable":"2dsphere",name:1})
于 2016-09-24T14:28:04.007 回答