MongoDB cung cấp nhiều cách để chèn tài liệu vào một bộ sưu tập.
Dưới đây là 5 cách để chèn tài liệu vào bộ sưu tập khi sử dụng mongo shell.
insertOne()
Phương pháp
insertOne()
phương thức chèn một tài liệu duy nhất vào một bộ sưu tập.
Tên đầy đủ của nó là db.collection.insertOne()
, nơi collection
là tên của bộ sưu tập để chèn tài liệu vào.
Dưới đây là ví dụ về việc chèn tài liệu vào bộ sưu tập có tên là pets
:
db.pets.insertOne( {
name: "Scratch",
type: "Cat"
} )
Kết quả:
{ "acknowledged" : true, "insertedId" : ObjectId("5fe2d15637b49e0faf1af214") }
db.collection.insertOne()
phương thức trả về một tài liệu chứa:
- Một boolean
acknowledged
dưới dạngtrue
nếu hoạt động chạy với mối quan tâm về ghi hoặcfalse
nếu mối quan tâm viết đã bị vô hiệu hóa. - Một trường
insertedId
với_id
giá trị của tài liệu đã chèn.
insertMany()
Phương pháp
insertMany()
phương thức tương tự như insertOne()
, ngoại trừ việc nó chèn nhiều tài liệu vào một bộ sưu tập.
Cũng theo kiểu tương tự với insertOne()
, tên đầy đủ của nó là db.collection.insertMany()
, nơi collection
là tên của bộ sưu tập để chèn tài liệu vào. Điều này áp dụng cho tất cả các phương pháp được liệt kê trong bài viết này.
Dưới đây là một ví dụ về việc sử dụng db.collection.insertMany()
để chèn nhiều tài liệu vào một bộ sưu tập được gọi là pets
:
db.pets.insertMany([
{ _id: 1, name: "Wag", type: "Dog" },
{ _id: 2, name: "Bark", type: "Dog" },
{ _id: 3, name: "Meow", type: "Cat" }
])
Kết quả:
{ "acknowledged" : true, "insertedIds" : [ 1, 2, 3 ] }
db.collection.insertMany()
phương thức trả về một tài liệu chứa:
- Một boolean
acknowledged
dưới dạngtrue
nếu hoạt động chạy với mối quan tâm về ghi hoặcfalse
nếu mối quan tâm viết đã bị vô hiệu hóa. - Một mảng
_id
giá trị cho mỗi tài liệu được chèn thành công.
insert()
Phương pháp
insert()
phương thức giống như sự kết hợp của insertOne()
và insertMany()
. Nó cho phép bạn chèn một tài liệu hoặc nhiều tài liệu vào một bộ sưu tập.
Đây là một ví dụ về việc sử dụng db.collection.insert()
để chèn một tài liệu:
db.pets.insert(
{ name: "Bruce", type: "Bat" }
)
Kết quả:
WriteResult({ "nInserted" : 1 })
Khi một tài liệu được chèn vào, db.collection.insert()
trả về một WriteResult
vật. Khi một mảng tài liệu được chèn vào, nó sẽ trả về một BulkWriteResult
đối tượng.
Đây là một ví dụ về việc sử dụng db.collection.insert()
để chèn nhiều tài liệu.
db.pets.insert([
{ _id: 1, name: "Wag", type: "Dog" },
{ _id: 2, name: "Bark", type: "Dog" },
{ _id: 3, name: "Meow", type: "Cat" }
])
Kết quả:
BulkWriteResult({ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 3, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] })
Như đã đề cập, một BulkWriteResult
đối tượng được trả về khi chèn một mảng tài liệu.
bulkWrite()
Phương pháp
bulkWrite()
phương pháp này cho phép bạn thực hiện các thao tác ghi hàng loạt.
Trên thực tế, insertMany()
đã thực hiện các hoạt động chèn hàng loạt. Tương tự với insert()
khi chèn một mảng tài liệu. Nhưng bulkWrite()
cho phép bạn thực hiện các thao tác chèn, cập nhật và loại bỏ hàng loạt, tất cả chỉ từ một lệnh gọi phương thức.
Ví dụ:
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
} }
])
Kết quả:
{ "acknowledged" : true, "deletedCount" : 0, "insertedCount" : 2, "matchedCount" : 0, "upsertedCount" : 2, "insertedIds" : { "0" : 1, "1" : 2 }, "upsertedIds" : { "2" : 3, "3" : 4 } }
Trong trường hợp này, bộ sưu tập không thực sự tồn tại (tôi đã loại bỏ nó sau ví dụ trước) và do đó, các tài liệu duy nhất hiện có trong bộ sưu tập là những tài liệu được chỉ định trong ví dụ này.
Hãy xem bộ sưu tập.
db.pets.find()
Kết quả:
{ "_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 }
Như mong đợi, tất cả bốn tài liệu đã được chèn.
Hoạt động nâng cấp
Điều này đưa chúng ta đến phương pháp thứ năm để chèn tài liệu vào một bộ sưu tập trong MongoDB - thao tác upert.
Đây là một phương pháp có điều kiện để chèn tài liệu. Nâng cấp là một tùy chọn mà bạn có thể sử dụng trên các hoạt động cập nhật. Nó chỉ chèn một tài liệu mới nếu tài liệu được chỉ định chưa tồn tại. Nếu nó tồn tại, thì tài liệu gốc sẽ được cập nhật (và không có tài liệu nào được chèn vào).
Chúng tôi đã thấy các ví dụ về cảnh báo. Trong ví dụ trước, chúng tôi đã chỉ định "upsert" : true
khi thực hiện updateOne
và replaceOne
các hoạt động. Điều đó dẫn đến việc chèn hai tài liệu vì bộ sưu tập không chứa tài liệu nào phù hợp với tiêu chí lọc của chúng.
Đây là một ví dụ khác về sự nâng cao. Lần này, chúng tôi sẽ sử dụng nó trên updateOne()
phương pháp.
db.pets.updateOne(
{ name: "Harry" },
{ $set: { type: "Hamster" } },
{ upsert: true }
)
Kết quả:
{ "acknowledged" : true, "matchedCount" : 0, "modifiedCount" : 0, "upsertedId" : ObjectId("5fe3dc44d991410169410524") }
Ở đây, chúng tôi muốn đặt tất cả những con vật cưng được gọi là Harry trở thành một chú chuột lang. Nhưng không có vật nuôi nào được gọi là harry, vì vậy một cảnh báo đã được thực hiện.
Các phương thức sau chấp nhận upsert
tham số:
-
update()
-
updateOne()
-
updateMany()
-
findAndModify()
-
findOneAndUpdate()
-
findOneAndReplace()
Do đó, khi upsert: true
được chỉ định, các phương thức này sẽ thực hiện thao tác nâng cấp khi chúng cố gắng cập nhật một tài liệu không tồn tại.