もちろん、これはまさにあなたがそれをするように求めていることなので、そうします。タイトルにもかかわらず、"ドット表記"<は使用されません。 / a> ここに。もちろん、これは、既存のプロパティを上書きしない場合に実行したいことです。現在、 $set
ここで構造を変更しない限り、基本的に冗長です。
これを「修正」するには、data
を操作する必要があります 最初にオブジェクト。これらの線に沿って何かを:
var newobj = {};
Object.keys( data ).forEach(function(key) {
if ( typeof(data[key]) == "object" ) {
Object.keys( data[key] ).forEach(function(subkey) {
newobj[key + "." + subkey] = data[key][subkey];
});
} else {
newobj[key] = data[key];
}
});
これにより、newobj
に出力されます。 このような構造:
{
"postcode" : "BV123456789BY",
"status.last_check" : 1413539153572,
"status.code" : "06",
"status.postnum" : "247431",
"status.date" : ISODate("2014-10-17T11:28:20.540Z"),
"status.text" : "06. Поступило в участок обработки почты (247431) Светлогорск - 1"
}
その後、もちろん、通常の更新を続行して、すべてを正しく行うことができます:
Order.update({ "postcode": newobj.postcode}, { "$set": newobj }, function (err) {
if (err) console.log(err);
});
もちろん、よりネストされた構造には再帰が必要ですが、これで一般的な考え方が得られるはずです。ドット表記が最適ですが、実際に使用する必要があります。