2012-04-09 46 views
0

我试图通过查找ID来获取用户的名字。Moongoose:在另一个选择中查找名称

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

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

快速例如:

比方说,你想找到所有Posts谈论咖啡因,它的作者是当前登录的user。很多

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

感谢:首先,定义你的模型:

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); 

..然后就可以了。将尽快尝试这个:) – PeterBechP 2012-04-09 19:57:17

+0

不断地得到这个errer: _schema尚未注册模型“undefined”._ 而在我的模式中,我已经这样做了:owner:{type:ObjectId,ref:'用户'} – PeterBechP 2012-04-10 05:08:29

+0

确认被推荐的集合是'user'还是'users'。另外,请仔细检查ref字符串中的大小写。尝试大写('用户')。 – 2012-04-10 14:14:03