MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

5 Möglichkeiten zum Einfügen von Dokumenten in MongoDB

MongoDB bietet viele Möglichkeiten, Dokumente in eine Sammlung einzufügen.

Hier sind 5 Möglichkeiten, Dokumente in eine Sammlung einzufügen, wenn Sie die Mongo-Shell verwenden.

Der insertOne() Methode

Die insertOne() Methode fügt ein einzelnes Dokument in eine Sammlung ein.

Sein vollständiger Name lautet db.collection.insertOne() , wobei collection ist der Name der Sammlung, in die das Dokument eingefügt werden soll.

Hier ist ein Beispiel für das Einfügen eines Dokuments in eine Sammlung namens pets :

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

Ergebnis:

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

Die db.collection.insertOne() Die Methode gibt ein Dokument zurück, das Folgendes enthält:

  • Ein boolescher acknowledged als true ob die Operation mit Write Concern oder false ausgeführt wurde wenn Schreibschutz deaktiviert war.
  • Ein Feld insertedId mit der _id Wert des eingefügten Dokuments.

Der insertMany() Methode

Die insertMany() -Methode ähnelt insertOne() , außer dass mehrere Dokumente in eine Sammlung eingefügt werden.

Auch auf ähnliche Weise wie insertOne() , sein vollständiger Name ist db.collection.insertMany() , wobei collection ist der Name der Sammlung, in die das Dokument eingefügt werden soll. Dies gilt für alle in diesem Artikel aufgeführten Methoden.

Hier ist ein Beispiel für die Verwendung von db.collection.insertMany() um mehrere Dokumente in eine Sammlung namens pets einzufügen :

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

Ergebnis:

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

Die db.collection.insertMany() Die Methode gibt ein Dokument zurück, das Folgendes enthält:

  • Ein boolescher acknowledged als true ob die Operation mit Write Concern oder false ausgeführt wurde wenn Schreibschutz deaktiviert war.
  • Ein Array von _id Werte für jedes erfolgreich eingefügte Dokument.

Das insert() Methode

Das insert() Methode ist wie eine Kombination aus insertOne() und insertMany() . Sie können damit entweder ein einzelnes Dokument oder mehrere Dokumente in eine Sammlung einfügen.

Hier ist ein Beispiel für die Verwendung von db.collection.insert() um ein einzelnes Dokument einzufügen:

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

Ergebnis:

WriteResult({ "nInserted" : 1 })

Wenn ein einzelnes Dokument eingefügt wird, db.collection.insert() gibt ein WriteResult zurück Objekt. Wenn ein Array von Dokumenten eingefügt wird, wird ein BulkWriteResult zurückgegeben Objekt.

Hier ist ein Beispiel für die Verwendung von db.collection.insert() um mehrere Dokumente einzufügen.

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

Ergebnis:

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

Wie bereits erwähnt, ein BulkWriteResult Objekt wird zurückgegeben, wenn ein Array von Dokumenten eingefügt wird.

Das bulkWrite() Methode

Das bulkWrite() -Methode können Sie Massenschreibvorgänge ausführen.

Eigentlich insertMany() führt bereits Masseneinfügungsvorgänge durch. Dasselbe gilt für insert() beim Einfügen einer Reihe von Dokumenten. Aber bulkWrite() ermöglicht es Ihnen, Masseneinfügungs-, Aktualisierungs- und Entfernungsvorgänge durchzuführen, alles über einen einzigen Methodenaufruf.

Beispiel:

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

Ergebnis:

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

In diesem Fall existierte die Sammlung nicht wirklich (ich habe sie nach dem vorherigen Beispiel gelöscht), und daher sind die einzigen Dokumente, die jetzt in der Sammlung enthalten sind, die in diesem Beispiel angegebenen.

Werfen wir einen Blick auf die Sammlung.

db.pets.find()

Ergebnis:

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

Wie erwartet wurden alle vier Dokumente eingefügt.

Die Upsert-Operation

Dies bringt uns zu unserer fünften Methode zum Einfügen von Dokumenten in eine Sammlung in MongoDB – der Upsert-Operation.

Dies ist eher eine bedingte Methode zum Einfügen von Dokumenten. Ein Upsert ist eine Option, die Sie für Aktualisierungsvorgänge verwenden können. Es fügt nur dann ein neues Dokument ein, wenn das angegebene Dokument noch nicht existiert. Wenn es existiert, wird das Originaldokument aktualisiert (und kein Dokument eingefügt).

Wir haben bereits Beispiele für Upserts gesehen. Im vorherigen Beispiel haben wir "upsert" : true angegeben beim Ausführen von updateOne und replaceOne Operationen. Das führte dazu, dass zwei Dokumente eingefügt wurden, da die Sammlung keine Dokumente enthielt, die ihren Filterkriterien entsprachen.

Hier ist ein weiteres Beispiel für ein Upsert. Dieses Mal verwenden wir es für updateOne() Methode.

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

Ergebnis:

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

Hier wollten wir alle Haustiere namens Harry als Hamster festlegen. Aber es gab keine Haustiere namens Harry, also wurde ein Upsert durchgeführt.

Die folgenden Methoden akzeptieren den upsert Parameter:

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

Daher, wenn upsert: true angegeben ist, führen diese Methoden eine Upsert-Operation durch, wenn sie versuchen, ein nicht vorhandenes Dokument zu aktualisieren.