MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Atualização do campo de ponto Mongodb


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.