使用一个查询的输出在 Mongo shell 中执行另一个查询
Use the output of one query to execute another query in Mongo shell
我正在 Mongo shell 中执行查询并需要此查询的输出来执行第二个查询。第一个查询是求平均值的聚合查询。
第一个查询是:
db.table_name.aggregate([{$group: {_id:{userId:'$userId'},avgRating:{$avg:"$rating"}}}])
现在在输出中使用 _id (userId)
,我想从用户 table 获取数据。
不需要另一个查询,你仍然可以 运行 相同的聚合操作,但这次添加另一个使用 $lookup
operator which pipes the results from the previous $group
管道来做的管道user
集合的左连接:
db.table_name.aggregate([
{
"$group": {
"_id": "$userId",
"avgRating": { "$avg": "$rating" }
}
},
{
"$lookup": {
"from": "user",
"localField": "_id",
"foreignField": "_id",
"as": "users"
}
}
])
如果你的MongoDB版本不支持$lookup
运算符,那么你将需要两次查询,运行如下:
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);
我正在 Mongo shell 中执行查询并需要此查询的输出来执行第二个查询。第一个查询是求平均值的聚合查询。
第一个查询是:
db.table_name.aggregate([{$group: {_id:{userId:'$userId'},avgRating:{$avg:"$rating"}}}])
现在在输出中使用 _id (userId)
,我想从用户 table 获取数据。
不需要另一个查询,你仍然可以 运行 相同的聚合操作,但这次添加另一个使用 $lookup
operator which pipes the results from the previous $group
管道来做的管道user
集合的左连接:
db.table_name.aggregate([
{
"$group": {
"_id": "$userId",
"avgRating": { "$avg": "$rating" }
}
},
{
"$lookup": {
"from": "user",
"localField": "_id",
"foreignField": "_id",
"as": "users"
}
}
])
如果你的MongoDB版本不支持$lookup
运算符,那么你将需要两次查询,运行如下:
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);