sql >> Database >  >> NoSQL >> MongoDB

4 manieren om een ​​document bij te werken in MongoDB

MongoDB biedt verschillende manieren om een ​​document bij te werken. De methode die u gebruikt, hangt af van hoe u de update precies wilt uitvoeren.

Dit artikel presenteert 4 manieren om een ​​document in MongoDB bij te werken.

De db.collection.updateOne() Methode

De db.collection.updateOne() methode doet precies wat de naam belooft - het werkt één document bij.

Stel dat we een verzameling hebben met de naam pets die de volgende documenten bevat:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

We zouden één document als volgt kunnen bijwerken:

db.pets.updateOne( 
    { type: "Dog" },
    { $set: { type: "Cow" } }
    )

Resultaat:

{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

Dat heeft slechts één document bijgewerkt, ook al voldoen twee documenten aan de filtercriteria (de criteria zijn type: "Dog" ).

We kunnen de resultaten als volgt controleren:

db.pets.find()

Resultaat:

{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Het eerste document heeft nu een type van Cow in plaats van Dog , maar het tweede document werd niet beïnvloed, ook al voldeed het ook aan de filtercriteria.

De db.collection.updateMany() Methode

De db.collection.updateMany() methode werkt alle documenten bij die overeenkomen met het opgegeven filter voor een verzameling.

Laten we de originele incassodocumenten gebruiken:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Nogmaals, we kunnen zien dat twee documenten Dog . hebben als hun type .

We kunnen beide documenten tegelijk als volgt bijwerken:

db.pets.updateMany( 
    { type: "Dog" },
    { $set: { type: "Cow" } }
    )

Resultaat:

{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }

Dit laat ons zien dat twee documenten overeenkwamen en twee werden bijgewerkt.

We kunnen de collectie controleren:

db.pets.find()

Resultaat:

{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Cow" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

De db.collection.update() Methode

De db.collection.update() methode kan een enkel document of meerdere documenten in een verzameling bijwerken.

Standaard wordt er slechts één document bijgewerkt. Maar als multi: true is opgegeven, werkt het alle documenten bij die voldoen aan de zoekcriteria.

Een enkel document bijwerken

Laten we de originele verzameling documenten opnieuw gebruiken:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

We zouden één document als volgt kunnen bijwerken:

db.pets.update( 
    { type: "Dog" },
    { $set: { type: "Cow" } }
    )

Resultaat:

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

Slechts één document is bijgewerkt. Dit wordt bevestigd wanneer we de collectie opvragen.

db.pets.find()

Resultaat:

{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Meerdere documenten bijwerken

Laten we weer teruggaan naar de oorspronkelijke verzameling documenten:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

En nu voegen we multi: true . toe aan onze update-operatie om alle documenten bij te werken die voldoen aan de zoekcriteria:

db.pets.update( 
    { type: "Dog" },
    { $set: { type: "Cow" } },
    { multi: true }
    )

Resultaat:

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

Dus twee documenten zijn deze keer gematcht en bijgewerkt.

Laten we onze collectie nog eens bekijken:

db.pets.find()

Resultaat:

{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Cow" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Zoals verwacht hebben beide documenten nu een type van Cow .

De db.collection.replaceOne() Methode

De db.collection.replaceOne() methode vervangt een enkel document binnen de collectie op basis van het filter.

Opnieuw de originele collectie gebruikend:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Laten we eens kijken wat er gebeurt als we de db.collection.replaceOne() . gebruiken methode ertegen.

db.pets.replaceOne( 
    { type: "Dog" },
    { type: "Cow" }
    )

Resultaat:

{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

Eén document is bijgewerkt.

Laten we eens kijken.

db.pets.find()

Resultaat:

{ "_id" : 1, "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Deze keer werd het hele document vervangen door het nieuwe document (behalve de _id veld).

Deze methode vervangt het hele document (behalve de _id veld).

Upsert

Alle bovenstaande methoden accepteren een upsert argument waarmee u een upsert-bewerking kunt uitvoeren.

Wanneer upsert: true , wordt het document bijgewerkt als er een overeenkomst is met de zoekcriteria, maar als er geen overeenkomst is, wordt een nieuw document ingevoegd.

Voorbeeld:

db.pets.updateOne( 
    { name: "Wag" },
    { $set: { type: "Cow" } },
    { upsert: true }
    )

Resultaat:

{
	"acknowledged" : true,
	"matchedCount" : 0,
	"modifiedCount" : 0,
	"upsertedId" : ObjectId("5fe1d5aad991410169410165")
}

In dit geval waren er geen overeenkomsten, dus een document werd geüpdatet.

Laten we de collectie eens bekijken.

db.pets.find()

Resultaat:

{ "_id" : 1, "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
{ "_id" : ObjectId("5fe1d5aad991410169410165"), "name" : "Wag", "type" : "Cow" }

  1. Wanneer CouchDB over MongoDB gebruiken en vice versa?

  2. 3 eenvoudige stappen om MongoDB Sharded-clusters te maken

  3. Sessiestatus met Azure Redis Cache werkt niet op meerdere instanties

  4. Splits een tekenreeks door een teken in Lua