MongoDB chèn nhiều

Để 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

MongoDB chèn nhiề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 started


Chè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)

Chạy ví dụ »

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đượ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 "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

Làm cách nào để chèn nhiều bản ghi trong MongoDB?

Trình vỏ MongoDB cung cấp các phương thức sau để chèn tài liệu vào bộ sưu tập. .
Để chèn một tài liệu, hãy sử dụng db. thu thập. chènMột ()
Để chèn nhiều tài liệu, hãy sử dụng db. thu thập. chènMany()

Lệnh chèn nhiều tài liệu là gì?

insertMany() Phương thức insertMany() chèn một hoặc nhiều tài liệu vào bộ sưu tập. Phải mất một mảng tài liệu để chèn vào bộ sưu tập.

Làm cách nào để chèn nhiều hàng trong MongoDB bằng cầy mangut?

Để chèn Nhiều tài liệu vào MongoDB bằng Mongoose, hãy sử dụng Model. bộ sưu tập. insert(docs_array, options, callback_function); . .

Làm cách nào để chèn nhiều dữ liệu vào MongoDB bằng nút js?

Bạn có thể chèn nhiều tài liệu bằng bộ sưu tập. phương thức insertMany() . insertMany() lấy một mảng tài liệu để chèn vào bộ sưu tập đã chỉ định. Bạn có thể chỉ định các tùy chọn bổ sung trong đối tượng tùy chọn được truyền dưới dạng tham số thứ hai của phương thức insertMany().