Q:

MongoDB create a filtered collection with 2 collections data

I have a mongo database that consist of huge github data (users, issues, repos, etc).
I want to create small collections from this big data. 
I sorted "users" collection according to "followers" count of users. 
Then I got the first 1000 users from this query.  
db.getCollection("users").find({}).sort({followers:-1}).limit(1000).forEach(function(doc){
db.usersnew.insert(doc);});

There is another collection called "repos" that consists of info about users' repository. (user key field :"owner.id" ) 
I want to create a new filtered repos collection which consists only users who present in usersnew collection.
I tried to use $look_up but it works like join.
db.getCollection('reposnew').aggregate([{
$lookup:
    {
        from: "users",
        localField: "owner:id",
        foreignField : "id",
        as: "filteredRepo"
    }
}])

It creates users collection + repos in a one collection.
I want only filtered repos collection with specific users' data. 

A:

You're on the right track, you just need to add an $out stage.
db.getCollection('reposnew').aggregate([
    {
        $lookup:
        {
            from: "users",
            localField: "owner.id",
            foreignField : "id",
            as: "filteredRepo"
        }
    },
    {
        $match: {
            "filteredRepo.0": {$exists: true}
        }
    },
    {
        $project: {
            filteredRepo: 0
        }
    },
    {
        $out: "newCollectionName"
    }
])

