0

Я выполняю запрос в оболочке Mongo и требую, чтобы результат этого запроса выполнялся во втором запросе. Первый запрос - это совокупный запрос для поиска среднего значения.Используйте вывод одного запроса для выполнения другого запроса в оболочке Mongo.

Первый запрос:

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

Спасибо, это сработало для меня! –