1. ホーム
  2. node.js

[解決済み] 保存後のMongooseのポップアップ

2022-09-18 05:31:26

質問

新しく保存されたオブジェクトの作成者フィールドに手動または自動で入力することができません...唯一の方法は、すでに持っているオブジェクトに対して再クエリすることですが、それはしたくありません。

これは設定です。

var userSchema = new mongoose.Schema({   
  name: String,
});
var User = db.model('User', userSchema);

var bookSchema = new mongoose.Schema({
  _creator: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
  description: String,
});
var Book = db.model('Book', bookSchema);

ここで私は髪を引っ張っています

var user = new User();
user.save(function(err) {
    var book = new Book({
        _creator: user,
    });
    book.save(function(err){
        console.log(book._creator); // is just an object id
        book._creator = user; // still only attaches the object id due to Mongoose magic
        console.log(book._creator); // Again: is just an object id
        // I really want book._creator to be a user without having to go back to the db ... any suggestions?
    });
});

EDIT: 最新の mongoose ではこの問題が修正され、populate 機能が追加されています。

どのように解決するのですか?

モデルのpopulate関数を使って、これを行うことができるはずです。 http://mongoosejs.com/docs/api.html#model_Model.populate bookの保存ハンドラで、代わりに。

book._creator = user;

というようなことをすると

Book.populate(book, {path:"_creator"}, function(err, book) { ... });

おそらく、あなたを助けるには遅すぎる答えですが、私は最近これに行き詰まりました、そして、それは他の人のために役立つかもしれません。