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

Как да използвам $set и точкова нотация за актуализиране на елементи на вграден масив, използвайки съответния стар елемент?

Ако полето е член на масив, като го изберете, вие избирате всички тях.

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

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

Също така не можете да смесвате оператори за актуализиране с агрегиране, не можете да използвате неща като $sites.$.energy_consumption , ако правите агрегиране, трябва да използвате оператори за агрегиране, с изключение само на $match етап, където можете да използвате оператори за заявки.

Заявка

  • алтернативно малко по-различно решение от вашето, използващо $setField
  • Предполагам, че ще бъде по-бързо, но вероятно малка разлика
  • няма нужда да използвате javascript, ще бъде по-бавно
  • това е>=​​решение MongoDB 5, $setField е нов оператор

Тест код тук

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 $lookup динамична колекция

  2. Неоправдано бавна MongoDB заявка, въпреки че заявката е проста и съобразена с индекси

  3. Липсва синтаксис; преди изявление в mongoexport

  4. Редът на документите за връщане на Mongodb find

  5. Как да актуализирам база данни MongoDb в Java?