sql >> Databáze >  >> NoSQL >> MongoDB

Aktualizace tečkového pole Mongodb

Samozřejmě to dělá, protože to je přesně to, co po něm požadujete. Navzdory vašemu titulu se zde nepoužívá "tečková notace" tady vůbec. To je samozřejmě to, co chcete udělat, pokud nechcete přepsat existující vlastnosti. Právě teď nahrazujete celý objekt, přestože používáte $set kde pokud zde nezměníte strukturu, je v podstatě nadbytečné.

Chcete-li to "opravit", musíte manipulovat se svými data objekt jako první. S něčím v tomto smyslu:

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

To vám dává a výstup v newobj struktura takto:

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

Pak můžete samozřejmě pokračovat ve své normální aktualizaci a vše v pořádku:

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

Samozřejmě byste potřebovali nějakou rekurzi pro více vnořenou strukturu, ale to by vám mělo poskytnout obecnou představu. Tečkovaná notace je správná cesta, ale musíte ji skutečně používat.




  1. MongoDB - Vytáhněte více objektů z pole

  2. Použil někdo databázi objektů s velkým množstvím dat?

  3. Uložení návratové hodnoty node.js setTimeout v redis

  4. Je možné zlepšit rychlost Mongoexportu?