MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Актуализирайте или добавете към подколекция в mongo

Не съм сигурен дали има някакъв пряк начин да направя това в една заявка,

Актуализиране с тръбопровод за агрегиране започвайки от MongoDB v4.2,

  • $cond за да проверите дали името е в subColl масив,
  • вярно условие, трябва да се слее със съществуващ обект, $map за повторение на цикъла, проверете условието, ако съвпада с условието, след това обединете нов обект с данни с текущия обект, като използвате $mergeObjects
  • фалшиво условие, трябва да се свържат масиви, текущ subColl масив и нов обект с помощта на $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]] }
        ]
      }
    }
  }]
)

Playground




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как основният сървър ще бъде обработен автоматично в репликацията на mongodb

  2. Добре ли е да се отправят заявки към MongoDB няколко пъти на заявка?

  3. Mongodb find() заявка:връща само уникални стойности (без дубликати)

  4. MongoDB Opensource срещу MongoDB Enterprise

  5. Как да съхранявате данни в MongoDb с помощта на mongoose и асинхронен водопаден модел