请考虑以下事项:
我有一个名为C_a
的MongoDB集合。它包含大量文档(例如,超过50,000,000)。
为简单起见,我们假设每个文档都有以下模式:
{
"username" : "Aventinus"
"text": "I love StackOverflow!",
"tags": [
"programming",
"mongodb"
]
}
使用文本索引我可以返回包含关键字StackOverflow
的所有文档,如下所示:
db.C_a.find({$text:{$search:"StackOverflow"}})
我的问题如下:
考虑到上面的查询可能会返回数十万个文档,将返回的结果直接保存到另一个名为C_b
的集合中的最简单/最快的方法是什么?
注意:This帖子解释了如何使用aggregate
查找完全匹配(即特定日期)。我有兴趣使用Text Index保存包含 特定 关键字的所有帖子。
答案 0 :(得分:1)
引用的答案是正确的。可以更新该答案的示例查询以使用您的条件:
db.C_a.aggregate([
{$match: {$text: {$search:"StackOverflow"}}},
{$out:"C_b"}
]);
来自$text
的MongoDB文档:
如果在聚合中使用$ text运算符,则以下限制也适用。
- 包含$ text的$ match阶段必须是管道中的第一个阶段。
- 文本操作员只能在舞台上出现一次。
- 文本运算符表达式不能出现在$或$ not表达式中。
- 默认情况下,文本搜索不会按匹配分数的顺序返回匹配的文档。在$ sort阶段使用$ meta聚合表达式。