MongoDB数组字段文本索引创建与查询失败问题排查
问题诊断与解决
嘿,问题出在你的索引创建语句里的字段路径写法上,查询语句本身是没问题的!
错误原因
在MongoDB中,引用嵌套数组里带空格的字段时,你不需要给字段名加单引号。你写的"Actors.'First name'"会被MongoDB误解为要索引Actors数组中名为'First name'(包含单引号)的字段,而不是实际存在的First name字段。这就导致文本索引根本没建在正确的演员名字字段上,自然搜不到"SANDRA"的结果。
正确的索引创建语句
把字段路径里的单引号去掉,用双引号包裹整个带空格的字段路径即可:
db.films.createIndex( { Category: "text", Description: "text", "Actors.First name": "text", "Actors.Last name": "text" }, { weights: { Category: 5, Description: 5, "Actors.First name":20, "Actors.Last name":20 }, name: "ix_text" } )
验证查询
创建好正确的索引后,再执行你的查询语句:
db.films.find( { $text: { $search: "SANDRA" } } ).pretty()
就能正常返回包含演员"SANDRA"的文档(也就是_id:1的那条记录)了。
额外提示
当字段名包含空格或特殊字符时,只需要用双引号把整个字段路径括起来就行,内部的字段名不需要额外加单引号。比如"Actors.First name"是标准的MongoDB嵌套字段引用方式,它能正确识别Actors数组元素里的First name字段。
内容的提问来源于stack exchange,提问作者Tarek EZZAT
相关产品推荐
相关产品推荐

