MongoDB使用2个集合数据创建一个经过过滤的集合

时间:2019-11-25 10:33:31

标签: mongodb filter collections

我有一个由巨大的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"
    }
}])

它在一个集合中创建用户集合+回购。 我只想过滤具有特定用户数据的回购集合。

1 个答案:

答案 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"
    }
])