sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB $setOnInsert

MongoDB $setOnInsert field update operator kan bruges til at indsætte en specifik værdi under en upsert.

Hvis en opdateringshandling resulterer i, at et nyt dokument indsættes (dvs. en upsert), så er $setOnInsert operatøren træder i kraft, ellers har den ingen effekt.

Eksempel

Antag, at vi har en samling kaldet dogs med følgende dokument:

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

Og vi kører følgende update() kommando for at opdatere et dokument, der ikke findes i samlingen:

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

Dette vil resultere i følgende output:

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

Hvilket fortæller os, at et dokument blev slettet.

Lad os tjekke samlingen:

db.dogs.find()

Resultat:

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

Vi kan se, at dokument 2 er blevet indsat, og det inkluderer feltet/værdien, som vi har angivet for $setOnInsert operatør (dvs. name: "Bark" ).

Når dokumentet findes (dvs. ingen upsert)

Lad os nu prøve at opdatere det dokument, vi lige har overført. Lad os bruge det samme udsagn som i det foregående eksempel, men med forskellige værdier.

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

Output:

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

Denne gang matchede et dokument og blev opdateret. Intet blev forstyrret.

Lad os tjekke samlingen igen.

db.dogs.find()

Resultat:

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

Så i dette tilfælde er weight og height felter blev opdateret, men name felt var det ikke.

Årsagen til, at navnefeltet ikke blev opdateret, er, at en upsert ikke blev udført. $setOnInsert operator specificerer kun feltet/værdien, der skal indstilles, når opdateringshandlingen resulterer i, at et nyt dokument indsættes (dvs. en upsert).


  1. Forbindelse nægtet til MongoDB fejl nr. 111

  2. Hvordan skyller jeg redis db fra python redis?

  3. doRedis med mærkelig socket-forbindelsesfejl i Ubuntu Linux, R og RStudio

  4. Lær Redis-databasen at kende:Gentag over nøgler