Natuurlijk doet het dat, want dit is precies wat u ervan vraagt. Ondanks je titel, is er geen gebruik van "puntnotatie" hier helemaal niet. Dit is natuurlijk wat u wilt doen als u bestaande eigenschappen niet wilt overschrijven. Op dit moment vervang je gewoon het hele object, ondanks je gebruik van $set
waar tenzij je de structuur hier verandert in principe overbodig is.
Om dit te "repareren", moet u uw data
manipuleren eerst bezwaar maken. Met iets in de trant van:
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];
}
});
Dat geeft je en output in de newobj
structuur als volgt:
{
"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"
}
Dan kun je natuurlijk doorgaan met je normale update en alles goed krijgen:
Order.update({ "postcode": newobj.postcode}, { "$set": newobj }, function (err) {
if (err) console.log(err);
});
Natuurlijk zou je wat recursie nodig hebben voor een meer geneste structuur, maar dit zou je het algemene idee moeten geven. Puntnotatie is de juiste keuze, maar je moet het ook echt gebruiken.