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

最初のクエリのドキュメントで何らかの方法でドキュメントが関連している場合は、スキーマやモデルで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}) 
}); 
+0

おかげでたくさん。これを試してみよう: – PeterBechP

+0

このエラーが発生し続ける: _schemaは "undefined"モデルに登録されていません。そして私のスキーマでは、このようにしています:owner:{type:ObjectId、ref: ' users '} – PeterBechP

+0

参照されたコレクションが 'user'か' users'かどうか確認してください。また、ref文字列の大文字小文字を再確認してください。それを大文字にしてみてください( 'User')。 –

関連する問題