sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man växlar ett element i array i mongoDB

Om du uppdaterar dokumentet kan du använda pipelinen i uppdateringen . Men den här funktionen är tillgänglig med MongoDB version 4.2 eller senare.

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

OBS: Om vi ​​antar variabeln element är en sträng värde.

Om du bara frågar kan du använda följande sammanställning:

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

Men om du använder MongoDB version tidigare än 4.2, kan du använda den sammanlagda utdata från ovan för att uppdatera dokumentet:

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


  1. hur man ersätter flera förekomster av en fras mongodb

  2. Hur anger man Meteor MongoDB-version på lokal?

  3. Hur uppdaterar man egenskapen i flera objekt i en array för ett dokument i Meteor collection/minimongo?

  4. Ruby Mongo Driver:Hur letar man efter datumintervall?