我的MongoDB查询:
"xyz"
即使以下情况查询也不成功: lovely#love
collection.insertOne({word: 'lovely'})
答案 0 :(得分:0)
如果为文本索引指定了语言,则MongoDB将应用词干。这意味着将每个单词还原为其词根形式,例如从“可爱”到“爱”。
这可能会导致您的问题,因为“ love”将被插入为“ love”,随后如果尝试插入“ lovely”,这也会减少为“ love”,从而导致重复的键错误。
请参见Text Indexes documentation:
文本索引标记并词干了 索引条目。 文本索引为每个唯一索引存储一个索引条目 索引中每个文档的每个索引字段中的词干 采集。该索引使用简单的特定于语言的后缀词干。
如果要避免这种情况,可以指定不使用的语言:
如果您将语言值指定为“无” ,则文本索引将使用 简单的分词,没有停用词列表,也没有词干。
我也会考虑您的索引策略。对于大多数用例来说,唯一的文本索引是没有意义的。如果您要索引知道唯一的单个单词并且不想阻止它们,请考虑在字段上使用常规索引。