我试图通过查找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});
});
}
});
希望你们明白。我试图从查询中的另一个选择中获取名称。但问题是,我无法在用户查询回调之外保存变量。我该怎么做正确的方法? : - )
在上面的帖子中,我只得到查询中的最后一个。
答案 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})
});