sql >> データベース >  >> NoSQL >> MongoDB

Golangmongodbアグリゲーション

    $lookup を適用することはできません 直接配列しますが、 $unwind にできます。 最初に。

    サンプルドキュメントがない場合、以下のコードスニペットはかなり一般的なアプローチです。

    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)
    

    アグリゲーション/パイプがbson.Mを返すことを言及する必要があります 、ハイドレイトされていないユーザーオブジェクト。結局、Mongoはリレーショナルデータベースではありません。




    1. MongoDBノードはobjectidが有効かどうかをチェックします

    2. mongodb_idに文字列を使用

    3. MongoDB update()

    4. find()モーター使用時のBadYieldError [MongoDB + Tornado]