sql >> Base de Datos >  >> NoSQL >> MongoDB

Actualización del campo de puntos de Mongodb

Por supuesto que sí, ya que esto es exactamente lo que le estás pidiendo que haga. A pesar de su título, no se usa "dot notation" aquí en absoluto. Por supuesto, esto es lo que desea hacer si tiene la intención de no sobrescribir las propiedades existentes. En este momento, solo está reemplazando todo el objeto, a pesar de su uso de $set donde a menos que cambie la estructura aquí es básicamente redundante.

Para "arreglar" esto, necesitas manipular tus data objeto primero. Con algo así:

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];
    }
});

Eso te da una salida en el newobj estructura como esta:

{
    "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"
}

Luego, por supuesto, puede continuar con su actualización normal y hacer todo bien:

Order.update({ "postcode": newobj.postcode}, { "$set": newobj }, function (err) {
    if (err) console.log(err);
});

Por supuesto, necesitaría algo de recursividad para una estructura más anidada, pero esto debería darle una idea general. La notación de puntos es el camino a seguir, pero realmente necesita usarla.