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

MongoDB $addToSet

I MongoDB er $addToSet operator tilføjer en værdi til et array, medmindre værdien allerede er til stede i arrayet.

Det ligner $push operator, bortset fra at $push tilføjer værdien, selvom værdien allerede er til stede.

Eksempel

Antag, at vi har en samling kaldet products med følgende dokumenter:

db.products.find()

Resultat:

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }

Vi kan bruge $addToSet at tilføje en værdi til et af disse arrays.

Eksempel:

db.products.update(
   { _id: 1 },
   { $addToSet: { sizes: "XL" } }
)

Output:

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

Lad os se på vores samling igen for at bekræfte ændringen:

db.products.find()

Resultat:

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }

Dublerede værdier

Hvis du forsøger at indsætte en værdi, der allerede findes i arrayet, sker der ikke noget. Med andre ord, $addToSet indsætter kun værdien, hvis den ikke allerede eksisterer.

Her er et eksempel på forsøg på at indsætte en værdi, der allerede eksisterer.

db.products.update(
   { _id: 1 },
   { $addToSet: { sizes: "XL" } }
)

Output:

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

Denne meddelelse fortæller os, at der var ét matchende dokument (dvs. dokumentet med en _id af 1 ), men der var ingen ændringer.

I det forrige eksempel så vi "nModified" : 1 , men i dette eksempel ser vi "nModified" : 0 . Det er fordi værdien ikke eksisterede, da vi indsatte den i det forrige eksempel, men i dette eksempel eksisterer den allerede.

Vi kan bekræfte dette ved at se på samlingen igen:

db.products.find()

Resultat:

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }

Tilføj flere værdier

Du kan bruge $each modifikator for at tilføje flere værdier til en matrix.

Eksempel:

db.products.update(
   { _id: 2 },
   { 
     $addToSet: { 
        sizes: {
           $each: [ "XXL", "XXXL" ]
        }
      } 
    }
)

Output:

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

Lad os nu tjekke samlingen igen:

db.products.find()

Resultat:

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL", "XXL", "XXXL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }

Vi kan se, at de to værdier blev tilføjet til arrayet i dokument 2 som forventet.

Tilføj et array til arrayet

Du kan også tilføje et helt array til arrayet. Når du gør dette, tilføjes hele arrayet som sit eget separate array.

Antag, at vi har en samling som denne:

db.foo.find()

Resultat:

{ "_id" : 1, "bar" : [ 1, 5, 3 ] }
{ "_id" : 2, "bar" : [ 8, 17, 18 ] }
{ "_id" : 3, "bar" : [ 15, 11, 8 ] }

Vi kan tilføje et array til et array som dette:

db.foo.update(
   { _id: 1 },
   { $addToSet: { bar: [ 7, 8, 9] } }
)

Output:

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

Tjek samlingen:

db.foo.find()

Resultat:

{ "_id" : 1, "bar" : [ 1, 5, 3, [ 7, 8, 9 ] ] }
{ "_id" : 2, "bar" : [ 8, 17, 18 ] }
{ "_id" : 3, "bar" : [ 15, 11, 8 ] }


  1. mongodb kunne ikke oprette forbindelse til serveren

  2. $lookup flere niveauer uden $unwind?

  3. Range Querying i Redis - Spring Data Redis

  4. Hvordan vælger man et enkelt felt til alle dokumenter i en MongoDB-samling?