多个MongoDB查询不使用循环?

我试图找出是否可以使我的MongoDB查询(fron Node.js)更快,更高效。

基本上我有一个“玩家”arrays,每个玩家都有一个“player_id”属性。 我想迭代每个Player,并使用player_id在MongoDB数据库中查找有关Player的数据。

由于Node.js的asynchronous性质,我必须保证,当我向数据库发送查询时,我得到的数据对应于用来查询的player_id。

到目前为止,我有以下代码(我简化了)。 我最感兴趣的是如何在不使用for循环的情况下实现这一点。 谢谢。

var playersArray = new Array({"player_id":1234567}, {"player_id":9847621}, {"player_id":0946783}, {"player_id":8712890}); queryDataForPlayers(playersArray, function(data){ //Done - Each Player now has a "new_data_property" property }) function queryDataForPlayers(playersArray){ var newPlayersArray = new Array(); var counter = 0; for(var i=0; i<playersArray.length; i++) { retrievePlayerData(playersArray[i].player_id, playersArray[i], function(err,data) { newPlayersArray.push(data); if(++counter == playersArray.length) { callback(newPlayersArray); }//end if }); } } var Schema = mongoose.model('Schema'); var ObjectID = require('mongodb').ObjectID; function retrievePlayerData(playerID, obj, callback){ Schema.find({_id:ObjectID(String(playerID))}, function(err,data){ obj["new_data_property"] = data; callback(err,obj); }); } 

我不能真的testing这个,但是你可以直接将一个播放器ID数组传递给mongo,并且只用一个查询就可以得到一个带有相关数据的文档

 var playersArray = new Array({"player_id":1234567}, {"player_id":9847621}, {"player_id":0946783}, {"player_id":8712890}); var Schema = mongoose.model('Schema'); var ObjectID = require('mongodb').ObjectID; function queryDataForPlayers(playersArray, callback){ var player_ids = playersArray.map(function(player) { return ObjectID(String(player.player_id)); }); Schema.find({ '_id': { $in: player_ids} }, function(err, docs){ callback(err, docs); }); } 

在$运算符中使用…你可以使用它

Schema.find({_ id:{$ in:[array_of_playerid]}}。exec(function(error,results)){}