这是我的样本数据
{
_id: 123123123,
author:{
name : "username"
},
data:{
title : "Hello World"
}
}这是我的索引命令:db.post.createIndex({"data.title":"text"})
但是当我执行db.post.find( { $text: { $search: "Hello" } } )时,我什么也得不到。
我应该运行什么命令来索引mongodb中的嵌入对象?
发布于 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}Hello的data.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“:{} }https://stackoverflow.com/questions/45987224
复制相似问题