Để chèn một bản ghi hoặc tài liệu như nó được gọi trong MongoDB, vào một bộ sưu tập, chúng tôi sử dụng phương thức insert_one()
Tham số đầu tiên của phương thức insert_one() là một từ điển chứa (các) tên và (các) giá trị của từng trường trong tài liệu bạn muốn chèn
Thí dụ
Chèn một bản ghi vào bộ sưu tập "khách hàng"
pymongo nhập khẩu
myclient = pymongo. MongoClient("mongodb. //máy chủ cục bộ. 27017/")
mydb = myclient["cơ sở dữ liệu của tôi"]
mycol = mydb["khách hàng"]
mydict = {"tên". "John", "địa chỉ". "Quốc lộ 37" }
x = mycol. chèn_one (mydict)
Chạy ví dụ »Trả lại trường _id
Phương thức insert_one() trả về một đối tượng InsertOneResult, có thuộc tính, inserted_id, chứa id của tài liệu được chèn
Thí dụ
Chèn một bản ghi khác vào bộ sưu tập "customers" và trả về giá trị của trường _id
mydict = {"tên". "Peter", "địa chỉ". "Lowstreet 27" }
x = mycol. chèn_one (mydict)
in(x. đã chèn_id)
Chạy ví dụ »Nếu bạn không chỉ định trường _id, thì MongoDB sẽ thêm một trường cho bạn và chỉ định một id duy nhất cho mỗi tài liệu
Trong ví dụ trên, không có trường _id nào được chỉ định, vì vậy MongoDB đã gán một _id duy nhất cho bản ghi (tài liệu)
Học cách lọc dữ liệu bằng Python như một nhà phân tích dữ liệu
Thử tham gia các buổi đào tạo thực hành với hướng dẫn từng bước từ chuyên gia. Hãy thử dự án có hướng dẫn được thực hiện với sự cộng tác của Coursera ngay bây giờ
Get startedChèn nhiều tài liệu
Để chèn nhiều tài liệu vào một collection trong MongoDB, chúng ta sử dụng phương thức insert_many()
Tham số đầu tiên của phương thức insert_many() là danh sách chứa từ điển với dữ liệu bạn muốn chèn
Thí dụ
pymongo nhập khẩu
myclient = pymongo. MongoClient("mongodb. //máy chủ cục bộ. 27017/")
mydb = myclient["cơ sở dữ liệu của tôi"]
mycol = mydb["khách hàng"]
danh sách của tôi = [
{ "Tên". "Amy", "địa chỉ". "Apple st 652"},
{ "Tên". "Hannah", "địa chỉ". "Núi 21"},
{ "Tên". "Michael", "địa chỉ". "Thung lũng 345"},
{ "Tên". "Cát", "địa chỉ". "Đại lộ 2"},
{ "Tên". "Betty", "địa chỉ". "Cỏ xanh 1"},
{ "Tên". "Richard", "địa chỉ". "Sky st 331"},
{ "Tên". "Susan", "địa chỉ". "Một chiều 98"},
{ "Tên". "Vicky", "địa chỉ". "Khu vườn vàng 2"},
{ "Tên". "Bến", "địa chỉ". "Công viên ngõ 38"},
{ "Tên". "William", "địa chỉ". "Trung đường 954"},
{ "Tên". "Chuck", "địa chỉ". "Đường chính 989"},
{ "Tên". "Viola", "địa chỉ". "Đi ngang 1633"}
]
x = mycol. insert_many(danh sách của tôi)
#in danh sách các giá trị _id của tài liệu đã chèn
in(x. đã chèn_id)
Phương thức insert_many() trả về một đối tượng InsertManyResult, có thuộc tính, insert_one()0, chứa id của tài liệu được chèn
Chèn nhiều tài liệu, với ID được chỉ định
Nếu bạn không muốn MongoDB gán id duy nhất cho tài liệu của mình, bạn có thể chỉ định trường _id khi bạn chèn (các) tài liệu
Mỗi nhóm thao tác có thể có tối đa. Nếu một nhóm vượt quá mức này, MongoDB sẽ chia nhóm thành các nhóm nhỏ hơn từ 1000 trở xuống. Ví dụ: nếu hàng đợi bao gồm 2000 thao tác, MongoDB tạo 2 nhóm, mỗi nhóm có 1000 thao tác
Kích thước và cơ chế nhóm là chi tiết hiệu suất bên trong và có thể thay đổi trong các phiên bản sau
Thực thi một danh sách các hoạt động trên một bộ sưu tập được phân đoạn thường sẽ chậm hơn so với thực thi một danh sách vì với một danh sách có thứ tự, mỗi hoạt động phải đợi hoạt động trước đó kết thúc
Tạo bộ sưu tập
Nếu bộ sưu tập không tồn tại, thì insertMany() tạo bộ sưu tập khi ghi thành công.
_id Trường
Nếu tài liệu không chỉ định một trường, hãy thêm trường _id và chỉ định một trường duy nhất cho tài liệu. Hầu hết các trình điều khiển tạo ObjectId và chèn trường _id , nhưng trình điều khiển sẽ tạo và điền _id if the driver or application does not.
Nếu tài liệu chứa trường _id , thì _id value must be unique within the collection to avoid duplicate key error.
khả năng giải thích
insertMany() không tương thích với.
sử dụng thay thế
Xử lý lỗi
Chèn đưa ra BulkWriteError ngoại lệ.
Loại trừ các lỗi Ghi liên quan, các hoạt động được sắp xếp sẽ dừng sau một lỗi, trong khi các hoạt động không được sắp xếp tiếp tục xử lý mọi hoạt động ghi còn lại trong hàng đợi
Lỗi liên quan đến ghi được hiển thị trong trường writeConcernErrors , trong khi tất cả các lỗi khác được hiển thị trong . Nếu gặp lỗi, số lượng thao tác ghi thành công sẽ được hiển thị thay vì danh sách các _id được chèn. Các thao tác có thứ tự hiển thị một lỗi gặp phải trong khi các thao tác không có thứ tự hiển thị từng lỗi trong một mảng. field. If an error is encountered, the number of successful write operations are displayed instead of a list of inserted _ids. Ordered operations display the single error encountered while unordered operations display each error in an array.
ví dụ
Các ví dụ sau chèn tài liệu vào bộ sưu tập products .
Chèn nhiều tài liệu mà không chỉ định trường _id Field
Ví dụ sau sử dụng db. thu thập. insertMany() để chèn tài liệu không chứa trường _id .
try { db.products.insertMany( [ { item: "card", qty: 15 }, { item: "envelope", qty: 20 }, { item: "stamps" , qty: 30 } ] ); } catch (e) { print (e); }
Hoạt động trả về tài liệu sau
{ "acknowledged" : true, "insertedIds" : [ ObjectId("562a94d381cb9f1cd6eb0e1a"), ObjectId("562a94d381cb9f1cd6eb0e1b"), ObjectId("562a94d381cb9f1cd6eb0e1c") ] }
Vì các tài liệu không bao gồm _id , hãy tạo và thêm _id field for each document and assigns it a unique value.
Các giá trị ObjectId dành riêng cho máy và thời gian khi thao tác được chạy. Như vậy, các giá trị của bạn có thể khác với các giá trị trong ví dụ.
Chèn một số tài liệu chỉ định một trường _id Field
Ví dụ/thao tác sau đây sử dụng insertMany() để chèn tài liệu bao gồm _id_id . Giá trị của _id . Giá trị của _id . Giá trị của _id . Giá trị của field. The value of _id phải là duy nhất trong bộ sưu tập để tránh lỗi khóa trùng lặp.
try { db.products.insertMany( [ { _id: 10, item: "large box", qty: 20 }, { _id: 11, item: "small box", qty: 55 }, { _id: 12, item: "medium box", qty: 30 } ] ); } catch (e) { print (e); }
Hoạt động trả về tài liệu sau
{ "acknowledged" : true, "insertedIds" : [ 10, 11, 12 ] }
Việc chèn một giá trị trùng lặp cho bất kỳ khóa nào là một phần của , chẳng hạn như _id , sẽ tạo ra một ngoại lệ. Những nỗ lực sau đây để chèn một tài liệu có giá trị _id đã tồn tại.
try { db.products.insertMany( [ { _id: 13, item: "envelopes", qty: 60 }, { _id: 13, item: "stamps", qty: 110 }, { _id: 14, item: "packing tape", qty: 38 } ] ); } catch (e) { print (e); }
Kể từ _id. 13 đã tồn tại, ngoại lệ sau được đưa ra.
BulkWriteError({ "writeErrors" : [ { "index" : 0, "code" : 11000, "errmsg" : "E11000 duplicate key error collection: restaurant.test index: _id_ dup key: { : 13.0 }", "op" : { "_id" : 13, "item" : "envelopes", "qty" : 60 } } ], "writeConcernErrors" : [ ], "nInserted" : 0, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] })
Lưu ý rằng một tài liệu đã được chèn vào. Tài liệu đầu tiên của _id. 13 sẽ chèn thành công, nhưng lần chèn thứ hai sẽ không thành công. Điều này cũng sẽ ngăn các tài liệu bổ sung còn lại trong hàng đợi được chèn vào.
Với được sắp xếp thành false , thao tác chèn sẽ .
Chèn không có thứ tự
Những lần sau cố gắng chèn nhiều tài liệu với trường _id và được sắp xếp. sai . Mảng tài liệu chứa hai tài liệu có các trường _id trùng lặp.
try { db.products.insertMany( [ { _id: 10, item: "large box", qty: 20 }, { _id: 11, item: "small box", qty: 55 }, { _id: 11, item: "medium box", qty: 30 }, { _id: 12, item: "envelope", qty: 100}, { _id: 13, item: "stamps", qty: 125 }, { _id: 13, item: "tape", qty: 20}, { _id: 14, item: "bubble wrap", qty: 30} ], { ordered: false } ); } catch (e) { print (e); }
Các hoạt động ném ngoại lệ sau
BulkWriteError({ "writeErrors" : [ { "index" : 2, "code" : 11000, "errmsg" : "E11000 duplicate key error collection: inventory.products index: _id_ dup key: { : 11.0 }", "op" : { "_id" : 11, "item" : "medium box", "qty" : 30 } }, { "index" : 5, "code" : 11000, "errmsg" : "E11000 duplicate key error collection: inventory.products index: _id_ dup key: { : 13.0 }", "op" : { "_id" : 13, "item" : "tape", "qty" : 20 } } ], "writeConcernErrors" : [ ], "nInserted" : 5, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] })
Trong khi tài liệu có mục. hộp "vừa " và mục. "băng" không chèn được do các giá trị _id trùng lặp, nInserted shows that the remaining 5 documents were inserted.
Sử dụng ghi mối quan tâm
Cho một bộ bản sao gồm ba thành viên, thao tác sau đây chỉ định w của đa số and wtimeout of 100:
________số 8_______
Nếu chính và ít nhất một phụ xác nhận mỗi thao tác ghi trong vòng 100 mili giây, nó sẽ trả về
try { db.products.insertMany( [ { item: "card", qty: 15 }, { item: "envelope", qty: 20 }, { item: "stamps" , qty: 30 } ] ); } catch (e) { print (e); } 0
Nếu tổng thời gian cần thiết cho tất cả các nút bắt buộc trong bộ bản sao để xác nhận thao tác ghi lớn hơn thời gian chờ , thì writeConcernError is displayed when the wtimeout period has passed.
Thao tác này trả về
try { db.products.insertMany( [ { item: "card", qty: 15 }, { item: "envelope", qty: 20 }, { item: "stamps" , qty: 30 } ] ); } catch (e) { print (e); } 1
← db. thu thập. insertOne() db. thu thập. isCapped() →
© MongoDB, Inc 2008-2017. MongoDB, Mongo và logo chiếc lá là các nhãn hiệu đã đăng ký của MongoDB, Inc