在mongodb嵌入式记录中搜索
我们有一个如下所示的mongodb文档,我们在messageTopic、messageTopicQuestion和answer字段上配置了文本索引,如果我使用文本字符串搜索,那么我希望结果中只包含匹配的嵌入记录,而不是整个文档 例如,在下面的文档中,如果我使用单词“private”搜索,那么结果应该只返回第一个嵌入的文档,而不是两个记录。如何仅检索匹配的嵌入文档并排除不匹配的文档在mongodb嵌入式记录中搜索,mongodb,search,full-text-search,document,Mongodb,Search,Full Text Search,Document,我们有一个如下所示的mongodb文档,我们在messageTopic、messageTopicQuestion和answer字段上配置了文本索引,如果我使用文本字符串搜索,那么我希望结果中只包含匹配的嵌入记录,而不是整个文档 例如,在下面的文档中,如果我使用单词“private”搜索,那么结果应该只返回第一个嵌入的文档,而不是两个记录。如何仅检索匹配的嵌入文档并排除不匹配的文档 { "_id": ObjectId("586e8efdde81e56032000084"), "messageT
{
"_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可以替换为要搜索的任何字段
我可以确认该场景在我的数据库上运行