使用一个查询的输出在Mongo shell中执行另一个查询

时间:2016-09-27 06:57:36

标签: mongodb mongodb-query aggregation-framework mongodb-aggregation

我在Mongo shell中执行查询,并要求输出此查询以执行第二个查询。第一个查询是查找平均值的聚合查询。

第一个查询是:

f

现在在输出中使用db.table_name.aggregate([{$group: {_id:{userId:'$userId'},avgRating:{$avg:"$rating"}}}]) ,我想从用户表中获取数据。

1 个答案:

答案 0 :(得分:1)

不需要其他查询,您仍然可以运行相同的聚合操作,但这次添加另一个使用 $lookup 运算符的管道,该运算符管理前一个 {的结果{3}} 管道在user集合上进行左连接:

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

如果您的MongoDB版本不支持 $group 运算符,那么您将需要两个查询,运行如下:

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);