0

参照ドキュメント自体を使用して DBref を設定し、親オブジェクトに取り込まれたかのようにドキュメントにアクセスするにはどうすればよいですか?

フィールドが dbref フィールドとして設定された単純なスキーマがある場合:

var PostSchema = new Schema({
  'title': String,
  '_author', { type: Schema.ObjectId, ref: 'users'}
});
var Post = mongoose.model('posts', PostSchema);

var UserSchema = new Schema({
  'name': String
});
Var User = mongoose.model('users', UserSchema);

私がこれをやろうとすると:

var john = User.findOne({'name': 'john'});
var post = new Post({'title': 'My Post'});
post._author = john;

post.save(function(err) {
  if (!err) {
    console.log(post._author);
  }
});

post._authorプロパティには、author._id の値があります。_author プロパティに著者ドキュメント全体の値を持たせたいと思います (投稿コレクションに対して検索クエリを実行し、著者オブジェクトを設定した場合と同様です)。

私の唯一の解決策は、保存コールバック内でそのような findOne クエリを実行し、作成者を元に戻すことを確認することです...これは、すべての情報が既にあるときに基本的に再クエリを実行する必要があるため、少し気分が悪くなります。

助言がありますか?ありがとう

4

1 に答える 1

0

これが、 Mongooseのpopulate機能の目的です。あなたの例ではpost._author = john._id、投稿を作成するときに設定し、投稿コレクションをクエリするときに、次のようなコードを使用_authorして完全な User オブジェクトを入力します。

post.findOne({'title': 'My Post'}).populate('_author').exec(function (err, post) {
    // post._author contains a User model instance
});
于 2012-05-19T15:49:23.993 に答える