Natürlich tut es das, denn das ist genau das, worum Sie es bitten. Trotz Ihres Titels wird "Punktnotation"$set
wo, wenn Sie die Struktur hier nicht ändern, ist im Grunde überflüssig.
Um dies zu "reparieren", müssen Sie Ihre data
manipulieren Objekt zuerst. Mit etwas in dieser Richtung:
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];
}
});
Das gibt Ihnen und die Ausgabe im newobj
Struktur wie folgt:
{
"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"
}
Dann können Sie natürlich mit Ihrem normalen Update fortfahren und alles richtig machen:
Order.update({ "postcode": newobj.postcode}, { "$set": newobj }, function (err) {
if (err) console.log(err);
});
Natürlich würden Sie für eine stärker verschachtelte Struktur eine gewisse Rekursion benötigen, aber dies sollte Ihnen die allgemeine Vorstellung vermitteln. Die Punktnotation ist der richtige Weg, aber Sie müssen sie tatsächlich verwenden.