sql >> Databasteknik >  >> NoSQL >> MongoDB

Golang mongodb aggregering

Du kan inte använda $lookup till array direkt, men du kan $unwind det först.

Utan exempeldokument är kodavsnittet nedan snarare ett allmänt tillvägagångssätt:

pipeline := []bson.M{ 
    bson.M{"$match": bson.M{"_id": userId }},
    bson.M{"$unwind": "$otherUsersIdsArrayName"},
    bson.M{
        "$lookup": bson.M{ 
            "from": userCollectionName, 
            "localField": otherUsersIdsArrayName, 
            "foreignField": "id", 
            "as": "friend"
        }
    },
    bson.M{"$unwind": "$friend"},
    bson.M{
        "$group": bson.M{
            "_id": "id",
            "id": bson.M{"$first": "$id"},
            "name": bson.M{"$first": "$name"},
            "avatar": bson.M{"$first": "$avatar"},
            otherUsersIdsArrayName: bson.M{ "$push": "$friend"}
        }
    }
}
pipe := collection.Pipe(pipeline)
resp := []bson.M{}
err = pipe.All(&resp)

Jag bör nämna att aggregation/pipe returnerar bson.M , inte hydratiserade användarobjekt. Mongo är trots allt inte en relationsdatabas.




  1. Hur kvarstår MongoDB - data från en körande Docker-behållare i en ny bild?

  2. DIY Cloud Database on Amazon Web Services - New Whitepaper

  3. Minska poäng i Redis eller ta bort om 0

  4. Laravel Homestead Mongo installation som orsakar PHP-fel odefinierad symbol:php_json_serializable_ce i Okänd på rad 0