0

我在Mongo shell中執行查詢並要求此查詢的輸出執行第二個查詢。第一個查詢是查詢平均值的聚合查詢。使用一個查詢的輸出在Mongo shell中執行另一個查詢

第一個查詢是:

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

現在,使用在輸出中_id (userId),我想取從用戶表中的數據。

+1

我們可以看到您的疑問,編輯到問題中,並格式化很好嗎?我從你的問題中刪減了一些並不直接相關的材料,請注意[請求的緊急程度在這裏不受歡迎](http://meta.stackoverflow.com/q/326569)。 – halfer

+0

你想同時查詢兩個不同的表嗎? –

回答

0

無需另一個查詢,你仍然可以運行相同的總操作,但這次加入另一個管道,它使用$lookup操作該管道從以前$group管道進行左結果加入的user收藏:

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

如果您的MongoDB的版本不支持$lookup OPERAT或者,那麼您將需要兩個查詢,運行如下:

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

感謝它爲我工作! –

相關問題