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

Как да превключите елемент в масив в mongoDB

Ако актуализирате документа, можете да използвате конвейера в актуализацията . Но тази функция е налична с MongoDB версия 4.2 или по-нова.

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

ЗАБЕЛЕЖКА: Приемайки променливата element е низ стойност.

Ако просто правите заявки, можете да използвате следното агрегиране:

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

Но ако използвате версия на MongoDB, по-стара от 4.2, тогава можете да използвате обобщения изход от по-горе, за да актуализирате документа:

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. Запитване, филтриране и актуализиране на вложени масиви от множество нива в MongoDB с помощта на C#

  2. Изчислете разстоянието в Java с помощта на MongoDB

  3. Как да инсталирам php-mongo на CentOS 5.3?

  4. Запитване на размер на вътрешния масив в MongoDB

  5. Объркан относно терминологията Mongoose/Mongo. Поддокументите/вградените документи също ли са колекции?