sql >> Database >  >> NoSQL >> MongoDB

Bijwerken of toevoegen aan een subcollectie in mongo

Ik weet niet zeker of er een directe manier is om dit in een enkele zoekopdracht te doen,

Update met aggregatiepijplijn vanaf MongoDB v4.2,

  • $cond om te controleren of de naam in subColl staat reeks,
  • echte voorwaarde, moet worden samengevoegd met bestaand object, $map om de lus te herhalen, controleer de voorwaarde als deze overeenkomt met de voorwaarde en voeg vervolgens het nieuwe gegevensobject samen met het huidige object met behulp van $mergeObjects
  • valse voorwaarde, moet arrays samenvoegen, huidige subColl array en nieuw object met behulp van $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]] }
        ]
      }
    }
  }]
)

Speeltuin




  1. HBase Performance-testen met YCSB

  2. Gelijktijdigheid in gopkg.in/mgo.v2 (Mongo, Go)

  3. mongodb - geneste subdocumenten afwikkelen

  4. Sessiestatus met Azure Redis Cache werkt niet op meerdere instanties