1

Mongo シェルでクエリを実行していますが、2 番目のクエリを実行するには、このクエリの出力が必要です。最初のクエリは、平均を求める集計クエリです。

最初のクエリは次のとおりです。

db.table_name.aggregate([{$group: {_id:{userId:'$userId'},avgRating:{$avg:"$rating"}}}])

出力の を使用して、_id (userId)ユーザー テーブルからデータをフェッチします。

4

1 に答える 1

2

別のクエリは必要ありません。同じ集計操作を引き続き実行できますが、今回は$lookup、前のパイプラインからの結果をパイプ処理してコレクション$groupの左結合を行う演算子を使用する別のパイプラインを追加します。user

db.table_name.aggregate([
    {
        "$group": {
            "_id": "$userId",
            "avgRating": { "$avg": "$rating" }
        }
    },
    {
        "$lookup": {
            "from": "user",
            "localField": "_id",
            "foreignField": "_id",
            "as": "users"
        }
    }
])

MongoDB のバージョンが演算子をサポートしていない場合$lookupは、次のように実行する 2 つのクエリが必要になります。

var cursor = db.table_name.aggregate([
    {
        "$group": {
            "_id": "$userId",
            "avgRating": { "$avg": "$rating" }
        }
    }
]);

var results = cursor.map(function(doc){ 
    var user = db.users.findOne({ "_id": doc._id })
    return {
        user: user,
        avgRating: doc.avgRating
    }; 
});
printjson(results);
于 2016-09-27T10:27:00.180 に答える