Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不使用循环的多个MongoDB查询?_Javascript_Node.js_Mongodb_Mongoose_Database - Fatal编程技术网

Javascript 不使用循环的多个MongoDB查询?

Javascript 不使用循环的多个MongoDB查询?,javascript,node.js,mongodb,mongoose,database,Javascript,Node.js,Mongodb,Mongoose,Database,我试图弄清楚我是否可以使我的MongoDB查询(fron Node.js)更快、更高效 基本上我有一个“玩家”数组,每个玩家都有一个“玩家id”属性。我想迭代每个播放器,并使用Player_id在MongoDB数据库中查找关于该播放器的数据 由于Node.js的异步特性,我必须保证当我向数据库发送查询时,我得到的数据对应于用于查询的player_id 到目前为止,我有以下代码(我简化了)。我最感兴趣的是如何在不使用for循环的情况下实现这一点。谢谢 var playersArray = new

我试图弄清楚我是否可以使我的MongoDB查询(fron Node.js)更快、更高效

基本上我有一个“玩家”数组,每个玩家都有一个“玩家id”属性。我想迭代每个播放器,并使用Player_id在MongoDB数据库中查找关于该播放器的数据

由于Node.js的异步特性,我必须保证当我向数据库发送查询时,我得到的数据对应于用于查询的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);
    }); 
 }
var playersArray=新数组({“玩家id”:1234567},{“玩家id”:9847621},{“玩家id”:0946783},{“玩家id”:8712890});
查询玩家数据(玩家数组、函数(数据){
//完成-每个玩家现在都有一个“新数据属性”属性
})
函数QueryDataforPlayer(PlayerArray){
var newPlayersArray=新数组();
var计数器=0;

对于(var i=0;i我无法真正测试这一点,但您可以将一个播放器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);
    });
}

在运算符中使用$in…您可以像

Schema.find({u id:{$in:[array_of_playerid]}).exec(函数(错误,结果)){ }