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

Poddokument aktualizacji Mongoose, jeśli istnieje

Więc jesteś częścią drogi tam, ale oczywiście, gdy nie znajdziesz doc wtedy nie będziesz mieć doc do pracy w wywołaniu zwrotnym. MongoDB ma natywne sposoby obsługi tego rodzaju aktualizacji, ale oczywiście musisz przetestować pod kątem dopasowania tak jak ty.

To, co możemy tutaj zrobić, to po prostu pracować w ramach true lub false stan, w którym dokument istnieje.

Biorąc pod uwagę vote.value być Twoim true lub false za "głos"

Jeśli okaże się, że istnieje pasujący dokument, możesz wydać aktualizację w następujący sposób:

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

Więc to pasuje i używa pozycyjny $ operatora, aby upewnić się, że poprawny indeks pasującego elementu zostanie zaktualizowany. To, co tam dodałem, zapewnia, że ​​nawet nie dotkniesz dokumentu, w którym znajduje się vote.vaule ma już tę samą wartość.

A w fałszywym stanie chcesz $push na tablicę z nowym pozycja:

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

Oczywiście dodaj szczegóły wywołania zwrotnego, gdzie writeConcern jest stosowany, co prawdopodobnie robisz.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Konfiguracja środowiska MongoDB | Zainstaluj MongoDB w systemie Windows

  2. mangusta:wypełnij w mangusta, która nie ma żadnego ObjectId

  3. Zapytanie MongoDB za pomocą $i i wielu $lub

  4. Object.keys, jak uzyskać listę kluczy w mongodb

  5. Użyj zmiennej javascript jako wartości $regex w zapytaniu MongoDB