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

内部 (2 番目の ? ) 検索から取得するドキュメントが最初のクエリのドキュメントと何らかの形で関連している場合は、スキーマまたはモデルで DBRef のような関係を定義し、マングースのドキュメント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 に答える