Claro que sim, pois é exatamente isso que você está pedindo para fazer. Apesar do seu título, não há uso de "notação de ponto" aqui em tudo. É claro que isso é o que você deseja fazer se não pretende substituir as propriedades existentes. No momento, você está apenas substituindo o objeto inteiro, apesar do uso de
$set
onde a menos que você altere a estrutura aqui é basicamente redundante. Para "corrigir" isso, você precisa manipular seus
data
objeto primeiro. Com algo nesse sentido: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];
}
});
Isso fornece a você uma saída no
newobj
estrutura assim:{
"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"
}
Então, é claro, você pode prosseguir com sua atualização normal e acertar tudo:
Order.update({ "postcode": newobj.postcode}, { "$set": newobj }, function (err) {
if (err) console.log(err);
});
É claro que você precisaria de alguma recursão para uma estrutura mais aninhada, mas isso deve lhe dar a ideia geral. A notação de ponto é o caminho a percorrer, mas você precisa realmente usá-la.