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

Jak używać notacji $set i dot do aktualizacji osadzonych elementów tablicy przy użyciu odpowiedniego starego elementu?

Jeśli pole należy do tablicy, zaznaczając je, zaznaczasz je wszystkie.

{ar :[{"a" : 1}, {"a" : 2}]}

"$ar.a" = [1 ,2]

Nie możesz też mieszać operatorów aktualizacji z agregacją, nie możesz używać takich rzeczy jak $sites.$.energy_consumption , jeśli robisz agregację, musisz użyć operatorów agregujących, z wyjątkiem $match etap, w którym możesz użyć operatorów zapytań.

Zapytanie

  • alternatywne, nieco inne rozwiązanie niż twoje przy użyciu $setField
  • chyba będzie szybciej, ale prawdopodobnie niewielka różnica
  • nie ma potrzeby używania javascriptu, będzie wolniej
  • to jest>=rozwiązanie MongoDB 5, $setField jest nowym operatorem

Kod testowy tutaj

aggregate(
[{"$set":
  {"sites":
   {"$map":
    {"input":"$sites",
     "in":
     {"$setField":
      {"field":"new_field",
       "input":"$$this",
       "value":"$$this.energy_consumption"}}}}}}]
)


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB aktualizuje obiekt tablicy w tablicy

  2. Dlaczego nazwy kluczy są przechowywane w dokumencie w MongodDB?

  3. Jak uzyskać wszystkie pasujące elementy z tablicy obiektów w MongoDB?

  4. Mongo Query nie powiodło się z kodem błędu 13 i komunikatem o błędzie „brak autoryzacji”

  5. Maksymalny rozmiar stosu wywołań przekroczony przy wstawianiu 10000 dokumentów