sql >> Database >  >> NoSQL >> MongoDB

5 manieren om documenten in MongoDB in te voegen

MongoDB biedt vele manieren om documenten in een verzameling in te voegen.

Hier zijn 5 manieren om documenten in een verzameling in te voegen bij gebruik van de mongo-shell.

De insertOne() Methode

De insertOne() methode voegt een enkel document in een verzameling in.

De volledige naam is db.collection.insertOne() , waar collection is de naam van de verzameling waarin het document moet worden ingevoegd.

Hier is een voorbeeld van het invoegen van een document in een verzameling met de naam pets :

db.pets.insertOne( { 
    name: "Scratch", 
    type: "Cat" 
    } )

Resultaat:

{
	"acknowledged" : true,
	"insertedId" : ObjectId("5fe2d15637b49e0faf1af214")
}

De db.collection.insertOne() methode retourneert een document met daarin:

  • Een boolean acknowledged als true als de bewerking werd uitgevoerd met schrijfproblemen of false als schrijfzorg was uitgeschakeld.
  • Een veld insertedId met de _id waarde van het ingevoegde document.

De insertMany() Methode

De insertMany() methode is vergelijkbaar met insertOne() , behalve dat het meerdere documenten in een verzameling invoegt.

Ook op een vergelijkbare manier als insertOne() , de volledige naam is db.collection.insertMany() , waar collection is de naam van de verzameling waarin het document moet worden ingevoegd. Dit geldt voor alle methoden die in dit artikel worden genoemd.

Hier is een voorbeeld van het gebruik van db.collection.insertMany() om meerdere documenten in te voegen in een verzameling genaamd pets :

db.pets.insertMany([
    { _id: 1, name: "Wag", type: "Dog" },
    { _id: 2, name: "Bark", type: "Dog" },
    { _id: 3, name: "Meow", type: "Cat" }
    ])

Resultaat:

{ "acknowledged" : true, "insertedIds" : [ 1, 2, 3 ] } 

De db.collection.insertMany() methode retourneert een document met daarin:

  • Een boolean acknowledged als true als de bewerking werd uitgevoerd met schrijfproblemen of false als schrijfzorg was uitgeschakeld.
  • Een array van _id waarden voor elk succesvol ingevoegd document.

De insert() Methode

De insert() methode is als een combinatie van insertOne() en insertMany() . Hiermee kunt u een enkel document of meerdere documenten in een verzameling invoegen.

Hier is een voorbeeld van het gebruik van db.collection.insert() om een ​​enkel document in te voegen:

db.pets.insert(
    { name: "Bruce", type: "Bat" }
    )

Resultaat:

WriteResult({ "nInserted" : 1 })

Wanneer een enkel document wordt ingevoegd, db.collection.insert() retourneert een WriteResult voorwerp. Wanneer een array van documenten wordt ingevoegd, retourneert het een BulkWriteResult voorwerp.

Hier is een voorbeeld van het gebruik van db.collection.insert() om meerdere documenten in te voegen.

db.pets.insert([
    { _id: 1, name: "Wag", type: "Dog" },
    { _id: 2, name: "Bark", type: "Dog" },
    { _id: 3, name: "Meow", type: "Cat" }
    ])

Resultaat:

BulkWriteResult({
	"writeErrors" : [ ],
	"writeConcernErrors" : [ ],
	"nInserted" : 3,
	"nUpserted" : 0,
	"nMatched" : 0,
	"nModified" : 0,
	"nRemoved" : 0,
	"upserted" : [ ]
})

Zoals gezegd, een BulkWriteResult object wordt geretourneerd bij het invoegen van een array met documenten.

De bulkWrite() Methode

De bulkWrite() methode stelt u in staat om bulkschrijfbewerkingen uit te voeren.

Eigenlijk insertMany() voert al bulkinvoegbewerkingen uit. Hetzelfde met insert() bij het invoegen van een reeks documenten. Maar bulkWrite() stelt u in staat om bulkbewerkingen uit te voeren, bij te werken en te verwijderen, allemaal vanuit een enkele methodeaanroep.

Voorbeeld:

db.pets.bulkWrite([
    { insertOne: { "document": { "_id": 1, "name": "Bubbles", "type": "Fish" }}},
    { insertOne: { "document": { "_id": 2, "name": "Wag", "type": "Dog" }}},
    { updateOne : {
        "filter" : { "_id" : 3 },
        "update" : { $set : { "name" : "Fluffy", "type" : "Cat" } },
        "upsert" : true
    } },
    { replaceOne : {
        "filter" : { "_id" : 4 },
        "replacement" : { "name" : "Bite", "type" : "Dog", "weight": 5 },
        "upsert" : true
    } }
])

Resultaat:

{
	"acknowledged" : true,
	"deletedCount" : 0,
	"insertedCount" : 2,
	"matchedCount" : 0,
	"upsertedCount" : 2,
	"insertedIds" : {
		"0" : 1,
		"1" : 2
	},
	"upsertedIds" : {
		"2" : 3,
		"3" : 4
	}
}

In dit geval bestond de verzameling niet echt (ik liet deze vallen volgens het vorige voorbeeld), en dus zijn de enige documenten die zich nu in de verzameling bevinden, de documenten die in dit voorbeeld worden gespecificeerd.

Laten we de collectie eens bekijken.

db.pets.find()

Resultaat:

{ "_id" : 1, "name" : "Bubbles", "type" : "Fish" }
{ "_id" : 2, "name" : "Wag", "type" : "Dog" }
{ "_id" : 3, "name" : "Fluffy", "type" : "Cat" }
{ "_id" : 4, "name" : "Bite", "type" : "Dog", "weight" : 5 }

Zoals verwacht werden alle vier de documenten ingevoegd.

De Upsert-operatie

Dit brengt ons bij onze vijfde methode voor het invoegen van documenten in een verzameling in MongoDB - de upsert-bewerking.

Dit is meer een voorwaardelijke methode voor het invoegen van documenten. Een upsert is een optie die u kunt gebruiken bij updatebewerkingen. Het voegt alleen een nieuw document in als het opgegeven document nog niet bestaat. Als het bestaat, wordt het originele document bijgewerkt (en wordt er geen document ingevoegd).

We hebben al voorbeelden gezien van upserts. In het vorige voorbeeld specificeerden we "upsert" : true bij het uitvoeren van de updateOne en replaceOne activiteiten. Dat resulteerde in het invoegen van twee documenten, omdat de collectie geen documenten bevatte die aan hun filtercriteria voldeden.

Hier is nog een voorbeeld van een upsert. Deze keer gebruiken we het op de updateOne() methode.

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

Resultaat:

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

Hier wilden we alle huisdieren met de naam Harry instellen als een hamster. Maar er waren geen huisdieren die Harry heette, dus er werd een upsert uitgevoerd.

De volgende methoden accepteren de upsert parameter:

  • update()
  • updateOne()
  • updateMany()
  • findAndModify()
  • findOneAndUpdate()
  • findOneAndReplace()

Daarom, wanneer upsert: true is opgegeven, zullen deze methoden een upsert-bewerking uitvoeren wanneer ze proberen een niet-bestaand document bij te werken.


  1. Hoe u meerdere lijstwaarden kunt krijgen in één enkele oproep in RedisTemplate van Jedis Client

  2. LogicException:zorg ervoor dat de PHP Redis-extensie is geïnstalleerd en ingeschakeld

  3. Redis lua-script werkt niet

  4. Beste Session Storage Middleware voor Express + MongoDB