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

Mongodb 使用一个查询的输出在Mongo shell中执行另一个查询,mongodb,mongodb-query,aggregation-framework,mongodb-aggregation,Mongodb,Mongodb Query,Aggregation Framework,Mongodb Aggregation,我正在MongoShell中执行查询,并要求此查询的输出执行第二个查询。第一个查询是用于查找平均值的聚合查询 第一个查询是: db.table_name.aggregate([{$group: {_id:{userId:'$userId'},avgRating:{$avg:"$rating"}}}]) 现在使用输出中的\u id(userId),我想从用户表中获取数据。无需再次查询,您仍然可以运行相同的聚合操作,但这次添加另一个使用操作符的管道,该操作符通过管道将来自上一个管道的结果传递到用户

我正在MongoShell中执行查询,并要求此查询的输出执行第二个查询。第一个查询是用于查找平均值的聚合查询

第一个查询是:

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

现在使用输出中的
\u id(userId)
,我想从用户表中获取数据。

无需再次查询,您仍然可以运行相同的聚合操作,但这次添加另一个使用操作符的管道,该操作符通过管道将来自上一个管道的结果传递到
用户
集合上进行左连接:

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

如果您的MongoDB版本不支持运算符,则需要两个查询,按如下方式运行:

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

我们可以看看你的问题,编辑成问题,并且格式很好吗?我已经从你的问题中删去了不直接相关的内容,请注意。你想同时查询两个不同的表吗?