【问题标题】:search in mongodb embedded records在 mongodb 嵌入记录中搜索
【发布时间】:2017-06-12 11:03:33
【问题描述】:

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

例如,在下面的文档中,如果我使用单词“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" } } }])

感谢帮助。谢谢。

【问题讨论】:

    标签: mongodb search full-text-search document


    【解决方案1】:

    我相信这个问题是这个问题的一个变体How to get a specific embedded document inside a MongoDB collection? 问题是如何获取单个嵌入文档并排除其余文档。我的建议是使用 db.collection.find() 而不是聚合。 某种意义上的东西

         db.collection.find({ 'messageText.keyword': 'private' }, {'messageText.$': 1});
    

    ,如上面的答案所示。

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

    我可以确认该方案适用于我的数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多