私の質問は少し素朴ですが、どこからでも検索しても答えは見つかりませんでした。mongooseでサブ文書を「保存」機能で更新するにはどうすればよいですか?
私は私がupdate
機能
var toupdate = {}
toupdate["relations.$.year"] = 1900;
User.update({'relations.entity': 'R1'},{"$set": toupdate},
function(err,results){
// console.log(results);
});
でそれを更新することができる午前= R1
relations.entity
とユーザーの年を更新したいuser
name: {type:String},
relations: [{
entity: mongoose.Schema.Types.ObjectId,
year: {type:Number}
}]
のスキーマを持っています
これはうまくいきますが、私は.save()
メソッドを使用したいのですが、既に上記のように他のフィールドが更新されています。私はsave()
を呼び出す前にロジックを記述するにはどうすればよい
User.find({_id:"myid"},function(err,user){
user.name = "my new name";
// find the relation matching the relations.entity = "R1"
user.save(function(err,results){
// send my results returned
});
})
?マルチ関係については
'relations'はオブジェクトの配列であり、単一のオブジェクトではありません。フィールド '_id'はありません。私が見る唯一のIDは 'エンティティ'から来ています。 – Mikey
これは '_id'フィールドを持っています。スキンでは定義されていませんが、mongooseが作成しているようです。 – Masade
配列を見つけてindexの値を更新するだけで済みます。 user.name = "私の新しい名前"; \t \t \t \t index = "私の新しい名前"のようなものは、User.find({_ id: user.relations.findIndex((関連=> relation.entity == 'R1')); \t \t \t \t user.relations [インデックス] .year = 1900; user.save(関数(ERR、結果){ }); } ' – Veeram