Bien sûr que c'est le cas puisque c'est exactement ce que vous lui demandez de faire. Malgré votre titre, il n'y a pas d'utilisation de "dot notation" ici du tout. C'est bien sûr ce que vous voulez faire si vous avez l'intention de ne pas écraser les propriétés existantes. En ce moment, vous remplacez simplement l'objet entier, malgré votre utilisation de $set
où, à moins que vous ne changiez la structure ici, c'est fondamentalement redondant.
Pour "réparer" cela, vous devez manipuler vos data
objet en premier. Avec quelque chose dans ce sens :
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];
}
});
Cela vous donne une sortie dans le newobj
structure comme ceci :
{
"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"
}
Ensuite, bien sûr, vous pouvez procéder à votre mise à jour normale et tout arranger :
Order.update({ "postcode": newobj.postcode}, { "$set": newobj }, function (err) {
if (err) console.log(err);
});
Bien sûr, vous auriez besoin d'une récursivité pour une structure plus imbriquée, mais cela devrait vous donner une idée générale. La notation par points est la voie à suivre, mais vous devez réellement l'utiliser.