sql >> Databáze >  >> NoSQL >> MongoDB

Aktualizujte nebo přidejte do podsbírky v mongo

Nejsem si jistý, zda existuje nějaký přímý způsob, jak to udělat v jediném dotazu,

Aktualizace pomocí kanálu agregace počínaje MongoDB v4.2

  • $cond Chcete-li zkontrolovat, zda je název v subColl pole,
  • správná podmínka, potřeba sloučení s existujícím objektem, $map pro iteraci smyčky zkontrolujte podmínku, zda odpovídá podmínce, a poté sloučte nový datový objekt s aktuálním objektem pomocí $mergeObjects
  • false podmínka, potřeba spojit pole, aktuální subColl pole a nový objekt pomocí $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]] }
        ]
      }
    }
  }]
)

Hřiště




  1. nelze spustit mongodb jako sudo

  2. Konzistentní hašování jako způsob škálování zápisů

  3. Mongoose/Mongodb Aggregate - skupina a průměr více polí

  4. Odstraňování problémů se sdíleným clusterem MongoDB