sql >> Database teknologi >  >> NoSQL >> MongoDB

Sådan skifter du et element i array i mongoDB

Hvis du opdaterer dokumentet, kan du bruge pipelinen i opdateringen . Men denne funktion er tilgængelig med MongoDB version 4.2 eller nyere.

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

BEMÆRK: Forudsat variablen element er en streng værdi.

Hvis du bare spørger, kan du bruge følgende aggregering:

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

Men hvis du bruger MongoDB version tidligere end 4.2, så kan du bruge det samlede output fra oven til at opdatere dokumentet:

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


  1. mongodb.countDocuments er langsom, når resultatsættet er stort, selvom indeks bruges

  2. PHP mongo find felt starter med

  3. Mongoose &Express:Hvordan man korrekt fjerner, opretter og gemmer data, der er reference

  4. Opretter hirdis Redis-biblioteket sin egen tråd til asynkrone tilbagekald