Mongodb 为什么用$out将两个集合聚合在一起永不结束?蒙哥达
好的,我有两个收藏。其中一个有600万个文档,另一个有2500万个文档。我想把它们放在新的收藏中: 集合1示例: 电影 集合2示例: 性格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
{"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"
}
])