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

Mongodb:popchnij element do zagnieżdżonej tablicy, jeśli warunek jest spełniony

Problemem jest twoje niezrozumienie kilku rzeczy.

Kiedy wykonasz "outerArray.field.innerArray": { $in: [ 1, 3 ] } do zapytania, nie dostajesz tylko innerArray gdzie ma 1 lub 3. Otrzymujesz dokumenty, w których istnieją te tablice.

Więc pytasz o cały dokument.

Musisz użyć arrayFilter aby zaktualizować wartości, gdy filtr jest zgodny.

Tak więc, jeśli dobrze zrozumiałem, zapytanie, które chcesz, to:

db.collection.update(
{}, //Empty object to find all documents
{
  $push: { "outerArray.$[elem].field.innerArray": 4 }
},
{
  "arrayFilters": [ { "elem.field.innerArray": { $in: [ 1, 3 ] } } ]
})

Przykład tutaj

Zwróć uwagę, jak pierwszy obiekt w update jest pusty. Musisz umieścić tam pole pasujące do dokumentu (nie tablicy, dokumentu).

Jeśli chcesz zaktualizować tylko jeden dokument, musisz wypełnić pierwszy obiekt (obiekt zapytania) żądanymi wartościami, na przykład:{"_id": 11} .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nie można obliczyć średniego czasu

  2. Zduplikuj dokument w MongoDB przy użyciu nowego _id

  3. Rejestrowanie audytu dla MongoDB

  4. Czy MongoDB można spakować w aplikacji Electron?

  5. Jak bezpośrednio zapytać o pole zagnieżdżone bez określania pola nadrzędnego?