Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mongodb嵌入式记录中搜索_Mongodb_Search_Full Text Search_Document - Fatal编程技术网

在mongodb嵌入式记录中搜索

在mongodb嵌入式记录中搜索,mongodb,search,full-text-search,document,Mongodb,Search,Full Text Search,Document,我们有一个如下所示的mongodb文档,我们在messageTopic、messageTopicQuestion和answer字段上配置了文本索引,如果我使用文本字符串搜索,那么我希望结果中只包含匹配的嵌入记录,而不是整个文档 例如,在下面的文档中,如果我使用单词“private”搜索,那么结果应该只返回第一个嵌入的文档,而不是两个记录。如何仅检索匹配的嵌入文档并排除不匹配的文档 { "_id": ObjectId("586e8efdde81e56032000084"), "messageT

我们有一个如下所示的mongodb文档,我们在messageTopic、messageTopicQuestion和answer字段上配置了文本索引,如果我使用文本字符串搜索,那么我希望结果中只包含匹配的嵌入记录,而不是整个文档

例如,在下面的文档中,如果我使用单词“private”搜索,那么结果应该只返回第一个嵌入的文档,而不是两个记录。如何仅检索匹配的嵌入文档并排除不匹配的文档

{
  "_id": ObjectId("586e8efdde81e56032000084"),
"messageTopic": "My Private",
"messageText": [{
    "messageTopicQuestion": "agent private",
    "answer": "agent private",
    "_id": ObjectId("586e8efdde81e56032000085"),
    "keywords": ["private"]
}, {
    "messageTopicQuestion": "Greetings Checking",
    "answer": "Heloo I am good What about u",
    "_id": ObjectId("586fc80ccced739407000f4e"),
    "keywords": ["Hi-Good", "Heloo"]
}],
"__v": 3
}

我正在使用下面的脚本

      db.getCollection('messagetemplates').aggregate([{
             $match: {

                 $text: {$search: 'private'},
                 visible: 'PUB'
             }
         },{ $sort: { score: { $meta: "textScore" } } }])

谢谢你的帮助。谢谢。

我相信这个问题是这个问题的变种 问题是如何获取单个嵌入文档并排除其余文档。我的建议是使用db.collection.find()而不是聚合。 某种意义上的东西

     db.collection.find({ 'messageText.keyword': 'private' }, {'messageText.$': 1});
,如上述答案所示

messageText.keyword可以替换为要搜索的任何字段

我可以确认该场景在我的数据库上运行