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

Opdater eller føj til en undersamling i mongo

Jeg er ikke sikker på, om der er nogen direkte måde at gøre dette på i en enkelt forespørgsel,

Opdatering med aggregeringspipeline startende fra MongoDB v4.2,

  • $cond for at kontrollere navnet er i subColl array,
  • sand tilstand, skal flettes med eksisterende objekt, $map for at gentage loop, tjek betingelsen, hvis den matcher betingelsen, flet derefter nyt dataobjekt med det aktuelle objekt ved hjælp af $mergeObjects
  • falsk tilstand, behov for at sammensætte arrays, nuværende subColl array og nyt objekt ved hjælp af $concatArrays
const _id = 123;
const update = { name: 'John', other: 1000 };

Schema.findOneAndUpdate(
  { _id: _id },
  [{
    $set: {
      subColl: {
        $cond: [
          { $in: [update.name, "$subColl.name"] },
          {
            $map: {
              input: "$subColl",
              in: {
                $cond: [
                  { $eq: ["$$this.name", update.name] },
                  { $mergeObjects: ["$$this", update] },
                  "$$this"
                ]
              }
            }
          },
          { $concatArrays: ["$subColl", [update]] }
        ]
      }
    }
  }]
)

Legeplads




  1. Bestem effektivt ejeren af ​​en post i et hierarki med MongoDB

  2. Ruby on Rails Mongoid og Webfaction:Ikke autoriseret til forespørgsel (fejl 16550)

  3. Hvordan viser man detaljer om pymongo.errors.OperationFailure?

  4. MongoDB Aggregate Time Series