我有一个由巨大的github数据(用户,问题,存储库等)组成的mongo数据库。 我想从这些大数据创建小集合。 我根据“关注者”用户数量对“用户”集合进行了排序。 然后,我从该查询中获得了前1000个用户。
db.getCollection("users").find({}).sort({followers:-1}).limit(1000).forEach(function(doc){
db.usersnew.insert(doc);});
还有一个名为“ repos”的集合,其中包含有关用户存储库的信息。 (用户密钥字段:“ owner.id”)
我想创建一个新的过滤后的回购集合,该集合仅由在用户新集合中存在的用户组成。
我尝试使用$ look_up,但它的作用类似于join。
db.getCollection('reposnew').aggregate([{
$lookup:
{
from: "users",
localField: "owner:id",
foreignField : "id",
as: "filteredRepo"
}
}])
它在一个集合中创建用户集合+回购。 我只想过滤具有特定用户数据的回购集合。
答案 0 :(得分:1)
您步入正轨,只需添加一个$out阶段。
db.getCollection('reposnew').aggregate([
{
$lookup:
{
from: "users",
localField: "owner.id",
foreignField : "id",
as: "filteredRepo"
}
},
{
$match: {
"filteredRepo.0": {$exists: true}
}
},
{
$project: {
filteredRepo: 0
}
},
{
$out: "newCollectionName"
}
])