0

我试图通过查找 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});
    });
  }
});

希望大家理解。我试图从查询中的另一个选择中获取名称。但问题是,我无法在用户查询回调之外保存变量。我该如何以正确的方式做到这一点?:-)

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

4

1 回答 1

1

如果您想从内部(第二个?)找到的文档在某种程度上与第一个查询的文档相关,我建议您在架构或模型中定义一个类似 DBRef 的关系,并使用mongoose 文档populate()中显示的那样

快速示例:

假设您想查找所有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})
});
于 2012-04-09T19:48:20.870 回答