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

MongoDB $setOnInsert

MongoDB $setOnInsert Operátor aktualizace pole lze použít k vložení konkrétní hodnoty během upsert.

Pokud operace aktualizace vede k vložení nového dokumentu (tj. upsert), pak $setOnInsert operátor vstoupí v platnost, jinak nemá žádný účinek.

Příklad

Předpokládejme, že máme sbírku nazvanou dogs s následujícím dokumentem:

{ "_id" : 1, "name" : "Wag", "weight" : 11, "height" : 30 }

A spustíme následující update() příkaz k aktualizaci dokumentu, který v kolekci neexistuje:

db.dogs.update(
  { _id: 2 },
  {
     $set: { weight: 50, height: 40 },
     $setOnInsert: { name: "Bark" }
  },
  { upsert: true }
)

Výsledkem bude následující výstup:

WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 2 })

Což nám říká, že jeden dokument byl narušen.

Podívejme se na sbírku:

db.dogs.find()

Výsledek:

{ "_id" : 1, "name" : "Wag", "weight" : 11, "height" : 30 }
{ "_id" : 2, "height" : 40, "name" : "Bark", "weight" : 50 }

Vidíme, že byl vložen dokument 2 a obsahuje pole/hodnotu, kterou jsme poskytli pro $setOnInsert operátor (tj. name: "Bark" ).

Když dokument existuje (tj. bez aktualizace)

Nyní se pokusíme aktualizovat dokument, který jsme právě přerušili. Použijme stejný příkaz jako v předchozím příkladu, ale s jinými hodnotami.

db.dogs.update(
  { _id: 2 },
  {
     $set: { weight: 55, height: 45 },
     $setOnInsert: { name: "Fluffy" }
  },
  { upsert: true }
)

Výstup:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Tentokrát se jeden dokument shodoval a byl aktualizován. Nic nebylo naštvané.

Podívejme se znovu na sbírku.

db.dogs.find()

Výsledek:

{ "_id" : 1, "name" : "Wag", "weight" : 11, "height" : 30 }
{ "_id" : 2, "height" : 45, "name" : "Bark", "weight" : 55 }

Takže v tomto případě weight a height pole byla aktualizována, ale name pole nebylo.

Důvod, proč nebylo pole názvu aktualizováno, je ten, že se neprováděl upsert. $setOnInsert Operátor pouze specifikuje pole/hodnotu, která má být nastavena, když operace aktualizace povede k vložení nového dokumentu (tj. upsert).


  1. autentizace mongodb pomocí připojovacího řetězce

  2. Jak vložit dokument s datem v mongo?

  3. MongoDB – Filtrování obsahu interního pole v sadě výsledků

  4. Hromadné upsert v MongoDB pomocí mongoose