MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Zaktualizuj lub dołącz do podkolekcji w języku mongo

Nie jestem pewien, czy istnieje prosty sposób na zrobienie tego w jednym zapytaniu,

Aktualizuj za pomocą potoku agregacji począwszy od MongoDB v4.2,

  • $cond aby sprawdzić, czy nazwa jest w subColl tablica,
  • prawdziwy warunek, trzeba połączyć z istniejącym obiektem, $map aby wykonać iterację pętli, sprawdź warunek, czy spełnia warunek, a następnie połącz nowy obiekt danych z bieżącym obiektem za pomocą $mergeObjects
  • fałszywy warunek, trzeba połączyć tablice, bieżąca subColl tablica i nowy obiekt za 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]] }
        ]
      }
    }
  }]
)

Plac zabaw




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Indeksowanie tablicy/podobiektu w mongoDB powoduje błąd zduplikowanego klucza

  2. Usuń obiekt z zagnieżdżonej tablicy według wielu kryteriów

  3. Jak połączyć się z MongoDB z innej klasy PHP?

  4. Java:Jak wstawić hashmapę do MongoDB?

  5. MongoDB $min