sql >> Databasteknik >  >> NoSQL >> MongoDB

5 sätt att infoga dokument i MongoDB

MongoDB erbjuder många sätt att infoga dokument i en samling.

Här är 5 sätt att infoga dokument i en samling när du använder mongoskalet.

insertOne() Metod

insertOne() metoden infogar ett enda dokument i en samling.

Dess fullständiga namn är db.collection.insertOne() , där collection är namnet på samlingen att infoga dokumentet i.

Här är ett exempel på hur du infogar ett dokument i en samling som heter pets :

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

Resultat:

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

db.collection.insertOne() metod returnerar ett dokument som innehåller:

  • En boolesk acknowledged som true om operationen kördes med skrivproblem eller false om skrivproblem har inaktiverats.
  • Ett fält insertedId med _id värdet på det infogade dokumentet.

insertMany() Metod

insertMany() metod liknar insertOne() , förutom att det infogar flera dokument i en samling.

Också på liknande sätt som insertOne() , dess fullständiga namn är db.collection.insertMany() , där collection är namnet på samlingen som dokumentet ska infogas i. Detta gäller alla metoder som anges i den här artikeln.

Här är ett exempel på hur du använder db.collection.insertMany() för att infoga flera dokument i en samling som heter pets :

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

Resultat:

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

db.collection.insertMany() metod returnerar ett dokument som innehåller:

  • En boolesk acknowledged som true om operationen kördes med skrivproblem eller false om skrivproblem har inaktiverats.
  • En matris med _id värden för varje framgångsrikt infogat dokument.

insert() Metod

insert() Metoden är som en kombination av insertOne() och insertMany() . Det gör att du kan infoga antingen ett enda dokument eller flera dokument i en samling.

Här är ett exempel på hur du använder db.collection.insert() för att infoga ett enda dokument:

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

Resultat:

WriteResult({ "nInserted" : 1 })

När ett enskilt dokument infogas, db.collection.insert() returnerar ett WriteResult objekt. När en matris med dokument infogas returnerar den ett BulkWriteResult objekt.

Här är ett exempel på hur du använder db.collection.insert() för att infoga flera dokument.

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

Resultat:

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

Som nämnts, ett BulkWriteResult objektet returneras när en uppsättning dokument infogas.

bulkWrite() Metod

bulkWrite() metoden gör att du kan utföra massskrivoperationer.

Faktiskt, insertMany() utför redan massinsättningsoperationer. Samma med insert() när du infogar en mängd dokument. Men bulkWrite() gör det möjligt för dig att utföra massinsättning, uppdatering och borttagning, allt från ett enda metodanrop.

Exempel:

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
    } }
])

Resultat:

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

I det här fallet existerade inte samlingen faktiskt (jag tappade den efter föregående exempel), så de enda dokument som nu finns i samlingen är de som anges i det här exemplet.

Låt oss ta en titt på samlingen.

db.pets.find()

Resultat:

{ "_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 }

Som väntat infogades alla fyra dokument.

The Upsert Operation

Detta för oss till vår femte metod för att infoga dokument i en samling i MongoDB – upsert-operationen.

Detta är mer en villkorad metod för att infoga dokument. En upsert är ett alternativ som du kan använda vid uppdateringsoperationer. Den infogar bara ett nytt dokument om det angivna dokumentet inte redan finns. Om det finns uppdateras originaldokumentet (och inget dokument infogas).

Vi har redan sett exempel på uppror. I föregående exempel angav vi "upsert" : true när du utför updateOne och replaceOne operationer. Det resulterade i att två dokument infogades, eftersom samlingen inte innehöll några dokument som matchade deras filterkriterier.

Här är ett annat exempel på en upsert. Den här gången kommer vi att använda den på updateOne() metod.

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

Resultat:

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

Här ville vi ställa in alla husdjur som heter Harry att vara en hamster. Men det fanns inga husdjur som hette Harry, så en upsert gjordes.

Följande metoder accepterar upsert parameter:

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

Därför, när upsert: true är specificerad kommer dessa metoder att utföra en upsert-operation när de försöker uppdatera ett icke-existerande dokument.


  1. C#/.NET-klient för Redis

  2. döda zombie döda regionservrar

  3. Skapa ett jokerteckentextindex i MongoDB

  4. Hur man får återuppringning när nyckeln går ut i REDIS