0
私はマングースで1つのコレクション(メッセージ)を照会します。結果は文書の配列です。各ドキュメントには、異なるコレクション(ユーザー)のIDが含まれています。今私は、メッセージコレクションから各IDのユーザーコレクションを照会したいと思います。 アイデアは、フロントエンドに返す前に、各メッセージオブジェクトをユーザーコレクションの情報で更新することです。 私はasync.eachを使ってみました。コールバック()関数が各繰り返しの後に呼び出されていることを確認しているにもかかわらず、何らかの理由で最終関数が呼び出されることはありません。IDの配列を持つmongooseでmongodbを照会する最良の方法は何ですか?
app.get('/getmsg', function(req, res){
messages.find({query})
.exec(function(err, ms){
if(err) throw err;
async.each(ms, function(m, callback){
users.findOne({_id : m.userId})
.lean()
.exec(function(err, user){
if(err) {
console.log('error' , err);
callback();
} else {
m.userName = user.name;
// everything is working up to here
callback();
}
}), function(err){
res.send(ms); // this is never returned!
}
});
});
});
これを達成するより良い方法はありますか?私はこれが共通の問題でなければならないと考えています。
ありがとうございます!
['$ in'](https://docs.mongodb.com/manual/reference/operator/query/in/)。調べる。 –
また、 'messages.find({query})'はひどく間違っています。これは '.find({" query ":query})' 'に展開されます。' 'query ''というドキュメントに実際にプロパティを持たない限り、 '.find(query)'が必要な場所です。あなたはおそらくそうではありません。 –
単に 'users.find({" _id ":{" $ in ":ms.map(m => m.userId)}})'です。ループする必要はありません。それを見て怠惰な人のために。 –