Mongo シェルでクエリを実行していますが、2 番目のクエリを実行するには、このクエリの出力が必要です。最初のクエリは、平均を求める集計クエリです。
最初のクエリは次のとおりです。
db.table_name.aggregate([{$group: {_id:{userId:'$userId'},avgRating:{$avg:"$rating"}}}])
出力の を使用して、_id (userId)
ユーザー テーブルからデータをフェッチします。
Mongo シェルでクエリを実行していますが、2 番目のクエリを実行するには、このクエリの出力が必要です。最初のクエリは、平均を求める集計クエリです。
最初のクエリは次のとおりです。
db.table_name.aggregate([{$group: {_id:{userId:'$userId'},avgRating:{$avg:"$rating"}}}])
出力の を使用して、_id (userId)
ユーザー テーブルからデータをフェッチします。
別のクエリは必要ありません。同じ集計操作を引き続き実行できますが、今回は$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);