sql >> Database >  >> NoSQL >> MongoDB

Hoe een element in array in mongoDB te wisselen?

Als u het document bijwerkt, kunt u de pijplijn gebruiken in de update . Maar deze functie is beschikbaar met MongoDB versie 4.2 of hoger.

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

OPMERKING: Uitgaande van de variabele element is een tekenreeks waarde.

Als u alleen een zoekopdracht uitvoert, kunt u de volgende aggregatie gebruiken:

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

Maar als u MongoDB-versie eerder dan 4.2 gebruikt, kunt u de verzamelde uitvoer van hierboven gebruiken om het document bij te werken:

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


  1. Hoe kan ik in Meteor.js twee ontwikkelingsprojecten dezelfde Mongo-instantie laten gebruiken?

  2. Hadoop-ecosysteem - Inleiding tot Hadoop-componenten

  3. Maak dynamische zoekopdrachten met Mongoose

  4. MongoDB toArray-prestaties