MongoDB zapewnia wiele sposobów wstawiania dokumentów do kolekcji.
Oto 5 sposobów na wstawianie dokumentów do kolekcji podczas korzystania z powłoki mongo.
insertOne()
Metoda
insertOne()
metoda wstawia pojedynczy dokument do kolekcji.
Jego pełna nazwa to db.collection.insertOne()
, gdzie collection
to nazwa kolekcji, do której ma zostać wstawiony dokument.
Oto przykład wstawiania dokumentu do kolekcji o nazwie pets
:
db.pets.insertOne( {
name: "Scratch",
type: "Cat"
} )
Wynik:
{ "acknowledged" : true, "insertedId" : ObjectId("5fe2d15637b49e0faf1af214") }
db.collection.insertOne()
metoda zwraca dokument zawierający:
- Boole'owskie
acknowledged
jakotrue
jeśli operacja została wykonana z problemem zapisu lubfalse
jeśli problem zapisu był wyłączony. - Pole
insertedId
z_id
wartość wstawionego dokumentu.
insertMany()
Metoda
insertMany()
metoda jest podobna do metody insertOne()
, z wyjątkiem tego, że wstawia wiele dokumentów do kolekcji.
Również w podobny sposób do insertOne()
, jego pełna nazwa to db.collection.insertMany()
, gdzie collection
to nazwa kolekcji, do której ma zostać wstawiony dokument. Dotyczy to wszystkich metod wymienionych w tym artykule.
Oto przykład użycia db.collection.insertMany()
aby wstawić wiele dokumentów do kolekcji o nazwie pets
:
db.pets.insertMany([
{ _id: 1, name: "Wag", type: "Dog" },
{ _id: 2, name: "Bark", type: "Dog" },
{ _id: 3, name: "Meow", type: "Cat" }
])
Wynik:
{ "acknowledged" : true, "insertedIds" : [ 1, 2, 3 ] }
db.collection.insertMany()
metoda zwraca dokument zawierający:
- Boole'owskie
acknowledged
jakotrue
jeśli operacja została wykonana z problemem zapisu lubfalse
jeśli problem zapisu był wyłączony. - Tablica
_id
wartości dla każdego pomyślnie wstawionego dokumentu.
insert()
Metoda
insert()
metoda jest jak kombinacja insertOne()
i insertMany()
. Umożliwia wstawienie pojedynczego dokumentu lub wielu dokumentów do kolekcji.
Oto przykład użycia db.collection.insert()
aby wstawić pojedynczy dokument:
db.pets.insert(
{ name: "Bruce", type: "Bat" }
)
Wynik:
WriteResult({ "nInserted" : 1 })
Po wstawieniu pojedynczego dokumentu db.collection.insert()
zwraca WriteResult
obiekt. Po wstawieniu tablicy dokumentów zwraca BulkWriteResult
obiekt.
Oto przykład użycia db.collection.insert()
aby wstawić wiele dokumentów.
db.pets.insert([
{ _id: 1, name: "Wag", type: "Dog" },
{ _id: 2, name: "Bark", type: "Dog" },
{ _id: 3, name: "Meow", type: "Cat" }
])
Wynik:
BulkWriteResult({ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 3, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] })
Jak wspomniano, BulkWriteResult
obiekt jest zwracany podczas wstawiania tablicy dokumentów.
bulkWrite()
Metoda
bulkWrite()
Metoda umożliwia wykonywanie operacji zapisu zbiorczego.
Właściwie insertMany()
już wykonuje operacje wstawiania zbiorczego. To samo z insert()
podczas wstawiania tablicy dokumentów. Ale bulkWrite()
umożliwia wykonywanie zbiorczych operacji wstawiania, aktualizowania i usuwania, wszystko za pomocą jednego wywołania metody.
Przykład:
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
} }
])
Wynik:
{ "acknowledged" : true, "deletedCount" : 0, "insertedCount" : 2, "matchedCount" : 0, "upsertedCount" : 2, "insertedIds" : { "0" : 1, "1" : 2 }, "upsertedIds" : { "2" : 3, "3" : 4 } }
W tym przypadku kolekcja w rzeczywistości nie istniała (upuściłem ją zgodnie z poprzednim przykładem), więc jedynymi dokumentami znajdującymi się teraz w kolekcji są te określone w tym przykładzie.
Przyjrzyjmy się kolekcji.
db.pets.find()
Wynik:
{ "_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 }
Zgodnie z oczekiwaniami wszystkie cztery dokumenty zostały wstawione.
Operacja Upsert
To prowadzi nas do naszej piątej metody wstawiania dokumentów do kolekcji w MongoDB – operacji upsert.
Jest to bardziej warunkowa metoda wstawiania dokumentów. Upsert to opcja, której można używać podczas operacji aktualizacji. Wstawia nowy dokument tylko wtedy, gdy określony dokument jeszcze nie istnieje. Jeśli istnieje, oryginalny dokument jest aktualizowany (i żaden dokument nie jest wstawiany).
Widzieliśmy już przykłady upsert. W poprzednim przykładzie określiliśmy "upsert" : true
podczas wykonywania updateOne
i replaceOne
operacje. Spowodowało to wstawienie dwóch dokumentów, ponieważ kolekcja nie zawierała żadnych dokumentów spełniających kryteria filtrowania.
Oto kolejny przykład upsert. Tym razem użyjemy go w updateOne()
metoda.
db.pets.updateOne(
{ name: "Harry" },
{ $set: { type: "Hamster" } },
{ upsert: true }
)
Wynik:
{ "acknowledged" : true, "matchedCount" : 0, "modifiedCount" : 0, "upsertedId" : ObjectId("5fe3dc44d991410169410524") }
Tutaj chcieliśmy, aby wszystkie zwierzaki o imieniu Harry były chomikami. Ale nie było żadnych zwierzątek o imieniu Harry, więc zrobiono zdenerwowanie.
Następujące metody akceptują upsert
parametr:
update()
updateOne()
updateMany()
findAndModify()
findOneAndUpdate()
findOneAndReplace()
Dlatego, gdy upsert: true
jest określony, metody te wykonają operację upsert podczas próby aktualizacji nieistniejącego dokumentu.