MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Актуализация на Mongodb точково поле

Разбира се, че го прави, тъй като това е точно това, което искате да направи. Въпреки заглавието ви не се използва "нотация с точки" тук изобщо. Това разбира се е, което искате да направите, ако възнамерявате да не презаписвате съществуващи свойства. В момента просто заменяте целия обект, въпреки използването на $set където, освен ако не промените структурата тук, е основно излишно.

За да "поправите" това, трябва да манипулирате вашите data обект първо. С нещо от този род:

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

Това ви дава изход в newobj структура като тази:

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

След това, разбира се, можете да продължите с нормалната си актуализация и да направите всичко както трябва:

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

Разбира се, ще ви е необходима някаква рекурсия за по-вложена структура, но това трябва да ви даде общата представа. Точковата нотация е правилният начин, но трябва действително да я използвате.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Solr Mongo/DocDB Delta Import Query не работи

  2. Spring -Mongodb съхранява/извлича enum като int не низ

  3. Замяна на вграден документ в масив в MongoDB

  4. Проектирайте като вложен документ в spring mongo

  5. Mongoose популация срещу агрегат