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

Projekt MongoDB zaktualizował rekord w zagnieżdżonej tablicy w zapytaniu findAndModify

Możesz także wypróbować positional $ operator używany z findAndModify() metoda. Operator zidentyfikuje element w tablicy do aktualizacji bez wyraźnego określenia pozycji elementu w tablicy. Uwaga, pole tablicy musi pojawić się jako część dokumentu zapytania i aby zwrócić dokument z modyfikacjami dokonanymi podczas aktualizacji, użyj nowej opcji, aby Twoja aktualizacja wyglądała jak

db.tests.findAndModify({
    query: {
        "arr.cond": 4
    },
    update: {
        "$set": {"arr.$.upd": 55 }
    },
    new : true,
    fields: { "arr": 1, "_id": 0 }   
})

wygeneruje wynik:

{
    "arr": [
        {
            "cond" : 1,
            "upd" : 2
        },
        {
            "cond" : 2,
            "upd" : 3
        },
        {
            "cond" : 4,
            "upd" : 55
        },
        {
            "cond" : 6,
            "upd" : 7
        },
        {
            "cond" : 8,
            "upd" : 9
        }
    ]
}

Ponieważ chcesz zwrócić zaktualizowany dokument, z projekcją pozycyjną $ projection operator może być używany tylko w dokumencie projekcji funkcji find() metoda lub findOne() metoda więc findAndModify() field opcja nie wyświetli tej części tablicy przy użyciu $ projection operatora.

Obejściem byłoby użycie natywnego JavaScript filter() metoda na zwróconym polu arr jako

var result = db.tests.findAndModify({
    query: {
        "arr.cond": 4
    },
    update: {
        "$set": {"arr.$.upd": 55 }
    },
    new : true,
    fields: { "arr": 1, "_id": 0 }   
})

var updated = []
if (result && result.arr) updated = result.arr.filter(function (item) { return item.cond == 4; });
printjson(updated);

To zostanie wydrukowane

[ { "cond" : 4, "upd" : 55 } ]

-- AKTUALIZUJ --

Lub $elemMatch projekcja, jak sugerowałeś w komentarzach poniżej:

var result = db.tests.findAndModify({
    query: {
        "arr.cond": 4
    },
    update: {
        "$set": {"arr.$.upd": 55 }
    },
    new : true,
    fields: {"arr": {"$elemMatch": { "cond": 4 } }, "_id": 0 }   
})

printjson(result);

Wyjście :

{ "arr" : [ { "cond" : 4, "upd" : 55 } ] }



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jaki jest najlepszy sposób obsługi globalnego połączenia Mongodb w NodeJs?

  2. MongoDB $setOnInsert

  3. htmlspecialchars usuwa wartość z tablicy?

  4. Wstawianie i sprawdzanie daty za pomocą MongoDB i Nodejs

  5. Jak uzyskać listę kolekcji w manguście?