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

Mongodb:избутва елемент към вложен масив, ако условието е изпълнено

Проблемът тук е вашето неразбиране на куп неща.

Когато направите "outerArray.field.innerArray": { $in: [ 1, 3 ] } във вашата заявка, вие не получавате само innerArray където има 1 или 3. Получавате документи, където съществуват тези масиви.

Така че правите заявка за целия документ.

Трябва да използвате arrayFilter за актуализиране на стойности, когато филтърът съответства.

Така че, ако съм ви разбрал правилно, заявката, която искате, е:

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

Пример тук

Обърнете внимание как първият обект в update празно е. Трябва да поставите полето там, за да съответства на документа (не на масива, на документа).

Ако искате да актуализирате само един документ, трябва да попълните първия обект (обект на заявка) със стойности, които желаете, например:{"_id": 11} .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. SocketTimeout с отворена връзка в MongoDB

  2. Разлика в производителността на Mongodb между хеш и възходящи индекси (някаква причина да не използвате хеш в неподредено поле?)

  3. Като се има предвид списък с идентификатори, кой е най-добрият начин да направите заявка кои идентификатори не съществуват в колекцията?

  4. Какво е поведението при задаване на таймаут при изпълнение на тръбопровода за агрегиране в драйвера на MongoDB Java?

  5. Какъв е пътят към базата данни по подразбиране за MongoDB?