猫鼬:在另一个选择中查找名称

时间:2012-04-09 19:03:37

标签: javascript node.js find express mongoose

我试图通过查找ID来获取用户名。

query.find(function(err, dat) {
  for(i in dat) {
    users.findOne({_id: dat[i].owner}, function(userErr, user) {
      dat[i].ownerName = user.name;
      if(parseInt(i)+1==dat.length) res.render('view', {local: dat});
    });
  }
});

希望你们明白。我试图从查询中的另一个选择中获取名称。但问题是,我无法在用户查询回调之外保存变量。我该怎么做正确的方法? : - )

在上面的帖子中,我只得到查询中的最后一个。

1 个答案:

答案 0 :(得分:1)

如果您希望从内部(第二个?)查找到的文档与第一个查询的文档有某种关联,我建议您在模式或模型中定义类似DBRef的关系并使用populate()mongoose documentation

中所示

简单示例:

假设你想找到所有Posts谈论咖啡因,其作者是当前登录的user。首先,定义您的模型:

var mongoose = require('mongoose')
  , Schema = mongoose.Schema

var UserSchema = new Schema({
    name    : String
  , email   : Number
  , posts   : [{ type: Schema.ObjectId, ref: 'Post' }]
});

var PostSchema = new Schema({
    _author : { type: Schema.ObjectId, ref: 'User' }
  , title    : String
  , body     : String
});

var Post = mongoose.model('Post', PostSchema);
var User = mongoose.model('User', UserSchema);

..然后你可以:

Post.find({title: /caffeine/i}).populate('_author', null, {name: user.name}).run(function (err, posts) {
 res.render('view', {local: posts})
});