Oczywiście, że tak, ponieważ jest to dokładnie to, o co go prosisz. Pomimo twojego tytułu, nie ma zastosowania "notacja z kropkami" w ogóle tutaj. To jest oczywiście to, co chcesz zrobić, jeśli nie chcesz nadpisywać istniejących właściwości. W tej chwili po prostu zastępujesz cały obiekt, pomimo użycia $set
gdzie, o ile nie zmienisz tutaj struktury, jest to w zasadzie zbędne.
Aby to "naprawić", musisz manipulować swoimi data
obiekt pierwszy. Coś w tym stylu:
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];
}
});
To daje i wyświetla w newobj
struktura taka:
{
"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"
}
Następnie możesz oczywiście kontynuować normalną aktualizację i wszystko naprawić:
Order.update({ "postcode": newobj.postcode}, { "$set": newobj }, function (err) {
if (err) console.log(err);
});
Oczywiście, aby uzyskać bardziej zagnieżdżoną strukturę, potrzebna byłaby pewna rekurencja, ale to powinno dać ogólny pomysł. Notacja z kropkami to najlepsza droga, ale musisz jej użyć.