2012-04-09 43 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