sql >> Databasteknik >  >> NoSQL >> MongoDB

Uppdatera eller lägg till en undersamling i mongo

Jag är inte säker på att det finns något rakt sätt att göra detta i en enda fråga,

Uppdatering med aggregeringspipeline från MongoDB v4.2,

  • $cond för att kontrollera namnet finns i subColl array,
  • true condition, behöver slås samman med befintligt objekt, $map för att iterera loop, kontrollera villkoret om det matchar villkoret, slå sedan ihop nytt dataobjekt med nuvarande objekt med $mergeObjects
  • falskt tillstånd, måste sammanfoga arrayer, nuvarande subColl array och nytt objekt med $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]] }
        ]
      }
    }
  }]
)

Lekplats




  1. Villkorlig $summa i MongoDB

  2. Connect-mongo-sessioner raderas inte automatiskt

  3. lagra bilder i mongodb med mongoose?? hur?

  4. MongoDB:forEach vs fetch + each