首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >嵌入式对象内部的MongoDB全文搜索

嵌入式对象内部的MongoDB全文搜索
EN

Stack Overflow用户
提问于 2017-08-31 17:38:02
回答 1查看 1.7K关注 0票数 2

这是我的样本数据

代码语言:javascript
复制
{
    _id: 123123123,
    author:{
     name : "username"
    },
    data:{
     title : "Hello World"
    }
}

这是我的索引命令:db.post.createIndex({"data.title":"text"})

但是当我执行db.post.find( { $text: { $search: "Hello" } } )时,我什么也得不到。

我应该运行什么命令来索引mongodb中的嵌入对象?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-01 08:06:48

以下是:db.post.createIndex({"data.title":"text"})是在嵌入式字段上创建文本索引的正确命令。

这一点:db.post.find( { $text: { $search: "Hello" } } )是使用文本索引在嵌入式字段:data.title中搜索值Hello的正确方式。

你做的一切都是正确的。为了验证这一点,我已经获取了您的文档,将其写入一个集合,使用您提供的createIndex()命令为该集合创建了一个文本索引,并使用您提供的find()命令搜索了该集合,并返回了文档

所以,问题可能在其他地方。我建议你:

  • 确认文本索引是,绝对是创建的。您可以通过运行db.post.getIndexes()来做到这一点,如果存在文本索引,并且确实覆盖了data.title,那么您应该可以在该命令的输出中看到类似的内容: { "v“:2,”键“:{ "_fts”:"text","_ftsx“:1 },"name”:"data.title_text","ns“:".post",”.post“:{ "data.title”:1 },"default_language“:"english","language_override“:”语言“,"textIndexVersion”:3}
  • 确认确实存在,这是一个包含Hellodata.title文档。您可以通过运行一个简单的find:db.post.find({'data.title': { $regex: /Hello/ } })来做到这一点。
  • 确认此命令:db.post.find( { $text: { $search: "Hello" } } ) 绝对使用您的文本索引。您可以通过使用.explain() (例如db.post.find( { $text: { $search: "Hello" } } ).explain())调用该命令来实现这一点,并且输出应该包括如下内容: "inputStage“:{”舞台“:"TEXT_MATCH","inputStage”:{“舞台”:"TEXT_OR","inputStage“:{”舞台“:"IXSCAN","keyPattern”:{ "_fts“:”文本“,"_ftsx“:1 },"indexName”:"data.title_text","isMultiKey“:true,"isUnique”:false,"isSparse“:false,"isPartial”:false,"indexVersion“:2,“方向”:“向后”,"indexBounds“:{} }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45987224

复制
相关文章

相似问题

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