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

Поддокумент за актуализиране на Mongoose, ако съществува

Така че вие ​​сте част от пътя дотам, но разбира се, когато не намерите doc тогава няма да имате doc за работа в обратното извикване. MongoDB има собствени начини за обработка на тези видове актуализации, но разбира се, трябва да тествате за съвпадение какъвто си.

Това, което можем да направим тук, е просто да работим в рамките на true или false състояние, където съществува документът.

Имайки предвид vote.value да бъде твоята true или false за „гласуване за“

Когато установите, че има съответстващ документ, можете да издадете актуализация като тази:

Question.update(
  { 
    _id: questionId, 
    "votes.createdBy" vote.createdBy,
    "votes.up": {"$ne": vote.value }
  },
  { $set: { "votes.$.up": vote.value } }
);

Така че съвпада и използва позиционен $ оператор, за да се уверите в правилния индекс на съответстващия елемент се актуализира. Това, което добавих там, гарантира, че дори не докосвате документа, където vote.vaule вече е със същата стойност.

И в условието false искате да $push върху масива с новите елемент:

Question.update(
  { 
    _id: questionId
  },
  { 
    $push: { 
      "votes": {
        "up": vote.value,
        "createdBy": vote.createdBy
      }
    }
  }
);

Разбира се, добавете детайлите за обратно извикване там, където writeConcern се прилага, което вероятно правите.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Случайна извадка от Mongo

  2. Пропуснете и ограничете за пагиниране за агрегат Mongo

  3. Как да изравните динамично поле с родителски документ - Spring данни Mongo DB

  4. Оптимизиране на Airflow задача, която прехвърля данни от BigQuery в MongoDB

  5. Как да преобразувам JSON обектна структура в точкова нотация?