私は次のようなオブジェクトを持っています。mongoose findOneAndUpdateはオブジェクトのみを追加します
var exObj = { 'title' : 'name1'};
それらのいくつかを今、私は時々、データを別のプロパティを追加したい(私は名前で参照したいようでない配列)オブジェクトのdataプロパティを持っていると
exObj = {
title : 'name2',
data : {
prop1 : 'prop1',
prop2 : 'prop2'
}
}
のように見えますデータプロパティが存在することがありますが、時にはそうではありませんが、プロパティ(addedProp)を追加して保存したいので、これで終了します。
exObj = {
title : 'name2',
data : {
prop1 : 'prop1',
prop2 : 'prop2',
addedProp : 'value'
}
}
findOneAndUpdateを使用すると、オブジェクト全体を渡すように見えるだけです。このようなものは私が現在行っていることです。
var data = {};
data.addedProp = value;
Collection.findOneAndUpdate({
title: 'name2'
}, {
data
}, {
upsert: true
})
.exec(function(err) {
if (err) {
console.log(err);
} else {
console.log('Updated');
}
});
明らかに、これは存在するデータオブジェクトを上書きします。 findOneAndUpdateを実行してオブジェクトに意味のある変更を加える正しい方法は何ですか?私はtoObject()にキャストしようとしましたが、次に.save()を実行するための適切なmongooseオブジェクトがありません。
さらなる説明を追加します。これは私が知っている単純な特性(そしてうまく働いた)のために働いていました。 プロパティを追加する前にプロパティの値があるかどうか確認する必要がある値を追加したい場合があります。
だからこのようなものです。
Collection.findOneAndUpdate({
field: val
}, {
if (tObj.title) {
title = tObj.title;
}
if (tObj.date) {
release_date = tObj.date;
}
if (tObj.name) {
name = tObj.name;
}
}, { upsert: true
})
.exec(function(err) {
if (err) {
//handler
} else {
//handler
}
});
'Collection.findOneAndUpdate({" title ":" name2 "}、{" data ":データ}、{upsert:true})でしたか? (コールバック) '? – chridam