Разбира се, че го прави, тъй като това е точно това, което искате да направи. Въпреки заглавието ви не се използва "нотация с точки" тук изобщо. Това разбира се е, което искате да направите, ако възнамерявате да не презаписвате съществуващи свойства. В момента просто заменяте целия обект, въпреки използването на $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);
});
Разбира се, ще ви е необходима някаква рекурсия за по-вложена структура, но това трябва да ви даде общата представа. Точковата нотация е правилният начин, но трябва действително да я използвате.