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

Jak przełączyć element w tablicy w mongoDB?

Jeśli aktualizujesz dokument, możesz użyć potoku w aktualizacji . Ale ta funkcja jest dostępna w MongoDB w wersji 4.2 lub nowszej.

db.collection.update(
  { },
  [
     { 
          $set: { 
              arr: { 
                  $cond: [ { $in: [ element, "$arr" ] }, 
                           { $setDifference: [ "$arr", [ element ] ] }, 
                           { $concatArrays: [ "$arr", [ element ] ] } 
                  ] 
              }
          }
     }
  ]
)

UWAGA: Zakładając zmienną element jest ciągiem wartość.

Jeśli tylko pytasz, możesz użyć następującej agregacji:

db.collection.aggregate([
     { 
          $addFields: { 
              arr: { 
                  $cond: [ { $in: [ element, "$arr" ] }, 
                           { $setDifference: [ "$arr", [ element ] ] }, 
                           { $concatArrays: [ "$arr", [ element ] ] } 
                  ] 
              }
          }
     }
] )

Ale jeśli używasz MongoDB w wersji wcześniejszej niż 4.2, możesz użyć zagregowanych danych wyjściowych z powyższego, aby zaktualizować dokument:

db.collection.aggregate( [
  // aggregation pipeine from above ...
] ).forEach( doc => db.collection.updateOne( { _id: doc._id }, { $set: { arr: doc.arr } } ) )


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. NoSQL kontra SQL, gdy skalowalność nie ma znaczenia

  2. Znajdowanie przecięcia między dwiema kolekcjami w MongoDb

  3. Jak formatować liczby w SQL

  4. Zapytanie Mongo na polach podrzędnych

  5. mongo $ suma składana, gdy robisz $rozwijanie, a następnie $grupowanie na wielu polach