我试图在Mongodb上播放文字索引。
我已经在一个集合上使用了文本索引:
db.ensureIndex({field1 : "text"})
它有效。
但我重试了另一个集合,我得到以下消息:
db.movies.ensureIndex({genres: "text"})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"ok" : 0,
"errmsg" : "found language override field in document with non-string type",
"code" : 17261
}
收集"电影"有一个"流派"字段是一个字符串数组。 例如:
> db.movies.findOne()
{
"_id" : ObjectId("51c460fdc30a209dd9621dc4"),
"genres" : [
"Crime",
"Drama"
]
...
}
此字段出现在所有文件中。
我不明白这个错误。任何的想法 ?
答案 0 :(得分:14)
当您尝试在文档中的字段上创建text
索引时,会发生此错误,并且该文档的field
名为language
非字符串< / strong>类型。
来自docs:
如果集合包含文档或子文档 不同的语言,在文档中包含一个名为language的字段 或子文档,并指定其语言 文件或子文件。
MongoDB将使用该文档的指定语言或 构建文本索引时的子文档
默认情况下,构建文本索引的语言是英语。如果文档范围中存在名为language
的字段,MongoDb会将其视为一个字段,指定用于构建该文档索引的语言。
所以,在你使用text index
并且有一个名为language
的字段是文档的一部分且不的字段指定的情况下欺骗MongoDB用于构建索引的语言,您需要将language_override
属性设置为一些不存在的虚拟字段。这是为了告知MongoDb,你应该使用英语作为默认语言,如果我的文档包含一个名为dummy
的字段,那么请使用该字段中的值作为语言为该文档构建索引,不 language
字段。
db.movies.ensureIndex( { generes: "text" },
{ language_override: "dummy" } )
答案 1 :(得分:2)
您的电影收藏中包含一个字段“语言”,其类型不被mongo DB接受。确保“language”是非空字符串,仅包含这些值(请参阅Text Search Languages):
da or danish
nl or dutch
en or english
fi or finnish
fr or french
de or german
hu or hungarian
it or italian
nb or norwegian
pt or portuguese
ro or romanian
ru or russian
es or spanish
sv or swedish
tr or turkish