MongoDB:如何将返回的结果保存到另一个集合?

时间:2018-05-09 17:02:38

标签: mongodb

请考虑以下事项:

我有一个名为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保存包含 特定 关键字的所有帖子。

1 个答案:

答案 0 :(得分:1)

引用的答案是正确的。可以更新该答案的示例查询以使用您的条件:

db.C_a.aggregate([
  {$match: {$text: {$search:"StackOverflow"}}},
  {$out:"C_b"}
]);

来自$text的MongoDB文档:

  

如果在聚合中使用$ text运算符,则以下限制也适用。

     
      
  • 包含$ text的$ match阶段必须是管道中的第一个阶段。
  •   
  • 文本操作员只能在舞台上出现一次。
  •   
  • 文本运算符表达式不能出现在$或$ not表达式中。
  •   
  • 默认情况下,文本搜索不会按匹配分数的顺序返回匹配的文档。在$ sort阶段使用$ meta聚合表达式。
  •