MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Aktualizacja pola kropkowego Mongodb

Oczywiście, że tak, ponieważ jest to dokładnie to, o co go prosisz. Pomimo twojego tytułu, nie ma zastosowania "notacja z kropkami" w ogóle tutaj. To jest oczywiście to, co chcesz zrobić, jeśli nie chcesz nadpisywać istniejących właściwości. W tej chwili po prostu zastępujesz cały obiekt, pomimo użycia $set gdzie, o ile nie zmienisz tutaj struktury, jest to w zasadzie zbędne.

Aby to "naprawić", musisz manipulować swoimi data obiekt pierwszy. Coś w tym stylu:

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 daje i wyświetla w newobj struktura taka:

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

Następnie możesz oczywiście kontynuować normalną aktualizację i wszystko naprawić:

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

Oczywiście, aby uzyskać bardziej zagnieżdżoną strukturę, potrzebna byłaby pewna rekurencja, ale to powinno dać ogólny pomysł. Notacja z kropkami to najlepsza droga, ale musisz jej użyć.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. zapytaj o dokumenty, które zależą od wartości innych dokumentów w mongodb

  2. Utwórz model mangusty na podstawie wyników zapytania szczupłego

  3. mongoDB Zmień nazwę pola osadzonego

  4. MongoDB $aggregate $wypychanie wielu pól w Java Spring Data

  5. Odfiltruj zduplikowane tablice i zwróć unikalną tablicę w agregacji mongodb