Mongodb 为什么用$out将两个集合聚合在一起永不结束?蒙哥达

Mongodb 为什么用$out将两个集合聚合在一起永不结束?蒙哥达,mongodb,aggregate,mongodb4.0,Mongodb,Aggregate,Mongodb4.0,好的,我有两个收藏。其中一个有600万个文档,另一个有2500万个文档。我想把它们放在新的收藏中: 集合1示例: 电影 集合2示例: 性格 {"characterId": "1", "movieId": "1", "characterName": "Name 1"}, {"characterId": "2", "movieId": "1", "characterName": "Name 2"}, {"characterId": "3", "movieId": "1", "characterNam

好的,我有两个收藏。其中一个有600万个文档,另一个有2500万个文档。我想把它们放在新的收藏中:

集合1示例:

电影

集合2示例:

性格

{"characterId": "1", "movieId": "1", "characterName": "Name 1"},
{"characterId": "2", "movieId": "1", "characterName": "Name 2"},
{"characterId": "3", "movieId": "1", "characterName": "Name 3"}
所以我想要一个新的收藏,比如:

{
  "movieId" : "1", 
  "name" : "Titanic", 
  "characters":[ *collection 2 here* ]
},
{
  "movieId" : "2", 
  "name" : "King Kong", 
  "characters":[]
}
我试过:

db.Movie.aggregate([{ $lookup: { from: "Character",localField: "movieId", foreignField: "movieId", as: "characters" }},{ $out : "movie_characters" }])
但它永远不会结束:((我指的是10小时后它还在思考)如果我在没有$out的情况下执行它,它可能会在10分钟内显示结果

我把$out搞错了吗


谢谢您的建议。

您在这里留下的主要内容是索引

$lookup
匹配外部字段时,MongoDB使用索引

因此,请使用以下方法在角色集合中创建索引:

db.Character.createIndex({ "movieId": 1 })
然后应用查找聚合

db.Movie.aggregate([
  {
    $lookup: {
      from: "Character",
      localField: "movieId", 
      foreignField: "movieId", 
      as: "characters" 
    }
  },
  { 
    $out : "movie_characters" 
  }
])

希望这会有所帮助:)

这个问题不仅存在于单个
索引中,还存在于性能方面。我强烈建议您在像您这样的繁重查询中使用。()

当您使用此查询时,您也会用所有文档“淹没”RAM。所以使用游标肯定会对您有所帮助


另外,在将查询投入生产之前,通过
Explain
模式尝试使用它来测试您的查询,该模式提供您需要知道的所有信息,特别是查询执行所需的时间、使用的索引以及更多信息。

哪个集合有2500万个文档?谢谢,Vijay Rajpurohit解决了这个问题,但我正在看你寄给我的未来参考资料。祝你度过愉快的一天:)谢谢你的时间,我很高兴这对你有帮助:)
db.Movie.aggregate([
  {
    $lookup: {
      from: "Character",
      localField: "movieId", 
      foreignField: "movieId", 
      as: "characters" 
    }
  },
  { 
    $out : "movie_characters" 
  }
])