2016-06-12 61 views
0

我不知道我需要怎么做我想要做什么。我的模式是这样的:搜索值的数组对猫鼬

var userObj = mongoose.Schema({ 
    'timestamp':{type: Date, default: Date.now()}, 
    'password':{type:String, required:true}, 
    "userName":{type:String, required:true, unique:true} 
}); 

    var groupSchema = mongoose.Schema({ 
    'creator':String, 
    'members':Array, //contains the _id of users added to the group 
    'admins':Array, 
    'name':String, 
    'timestamp':{type: Date, default: Date.now()}, 
    'description':String 
    }); 

其中成员架构有一个包含用户ID的数组。我需要从组文档中获取数组并获取用户名。

我开始了使用猫鼬.find()方法和推动的结果到一个数组环 - 但正如我所期望的阵列是回调函数的范围的空外。

 var dat = []; 
    for(var i = 0; i<passed.payload.length;i++){ 
     user.find({'_id':passed.payload[i]},'userName',function(err,result){ 
     if(err){ 
      console.log(err); 
     }else{ 
      dat.push(result); 
     } 
     }) 

    } 
    //res.send(dat) 

    console.log(dat); 

我不知道如何做到这一点 - 我考虑过使用.find拉所有用户ID,然后运行该阵列即可返回只匹配。这似乎是浪费资源拉全用户表,然后测试它。

是否有一个更复杂的查询,我可以用猫鼬使用_ids数组来匹配这样的数据?

回答

0

你外面得到一个空数组for循环的原因的链接是猫鼬的查询都是异步的(在你的情况User.find()),因此for循环会前獴查询是完成完成后形成空阵列。您可以通过承诺或一些NPM模块像async处理这个问题。

但是,由于@karlkurzer建议您不需要在此处循环访问数组,因此可以改为使用$inoperator。以上代码可以替换为:

user.find({'_id': {$in: passed.payload}},'userName',function(err,results){ 
    if(err){ 
     console.log(err); 
    }else{ 
     console.log(results); //You will get array of user names here 
    } 
    }); 

并且您应该获得与您在回调函数中传递的ID关联的userNames数组。

希望这会有所帮助!