私もこの答えを探していましたが、配列の最後のドキュメントにアクセスするのが好きかどうかはわかりません。ただし、別の解決策があります。メソッドm['b'].push
1または0の整数を返します-これはプッシュの成功に基づいていると思います(検証の観点から)。ただし、サブドキュメント、特にサブドキュメントの_idにアクセスするには、create
を使用する必要があります。 最初にメソッドを実行し、次にpush
。
コードは次のとおりです。
var subdoc = m['b'].create({ ba: 234, bb: "World" });
m['b'].push(subdoc);
console.log(subdoc._id);
m.save(function(err, model) { console.log(arguments); });
何が起こっているのかというと、オブジェクトをpushメソッドまたはcreateメソッドに渡すと、スキーマキャストがすぐに発生します(検証や型キャストなどを含む)。これは、これがObjectIdが作成される時間であることを意味します。モデルがMongoに保存されたときではありません。実際、mongoは_id値をサブドキュメントに自動的に割り当てません。これはmongooseの機能です。マングースの作成はここに文書化されています:ドキュメントの作成
したがって、サブドキュメント_idがある場合でも、それを保存するまでMongoにはまだ存在しないため、実行する可能性のあるDOCRefアクションにうんざりしていることにも注意してください。