Trong MongoDB, db. thu thập. phương thức insert[] được sử dụng để thêm hoặc chèn tài liệu mới vào bộ sưu tập trong cơ sở dữ liệu của bạn
Upsert
Ngoài ra còn có hai phương pháp "db. thu thập. update[]" và "db. thu thập. save[]" được sử dụng cho cùng một mục đích. Các phương pháp này thêm tài liệu mới thông qua một hoạt động được gọi là upert
Upsert là một thao tác thực hiện cập nhật tài liệu hiện có hoặc chèn tài liệu mới nếu tài liệu cần sửa đổi không tồn tại
cú pháp
Hãy lấy một ví dụ để minh họa cách chèn một tài liệu vào một bộ sưu tập. Trong ví dụ này, chúng tôi chèn một tài liệu vào một bộ sưu tập có tên là javatpoint. Thao tác này sẽ tự động tạo bộ sưu tập nếu bộ sưu tập hiện không tồn tại
Thí dụ
Sau khi chèn tài liệu thành công, thao tác sẽ trả về một đối tượng WriteResult với trạng thái của nó
đầu ra
WriteResult[{ "nInserted" : 1 }]
Ở đây, trường nInserted chỉ định số lượng tài liệu được chèn vào. Trong trường hợp có bất kỳ lỗi nào trong quá trình hoạt động, BulkWriteResult sẽ chỉ định lỗi đó
Trong quá trình chèn, mongod sẽ tạo trường _id và gán cho nó một giá trị ObjectId duy nhất, như được xác minh bởi tài liệu được chèn. Để xem tài liệu đã chèn, hãy xem câu lệnh sau
> db.invoice.find[];
{ "_id" : ObjectId["567554d2f61afaaed2aae48f"], "inv_no" : "I00001", "inv_date" : "10/10/2012" }
Thí dụ. Chèn một tài liệu chỉ định an_idField
Trong ví dụ sau, tài liệu được chuyển đến phương thức theinsert[] bao gồm the_idfield. Giá trị của_idphải là duy nhất trong bộ sưu tập để tránh lỗi khóa trùng lặp
db.invoice.insert[ { _id: 901,inv_no: "I00001", inv_date: "10/10/2012" } ];
đầu ra
> db.invoice.insert[ { _id: 901,inv_no: "I00001", inv_date: "10/10/2012" } ]; WriteResult[{ "nInserted" : 1 }]
Thao tác chèn tài liệu sau vào bộ sưu tập sản phẩm
{ "_id" : 901, "inv_no" : "I00001", "inv_date" : "10/10/2012" }
Thí dụ. Chèn nhiều tài liệu
Ví dụ sau thực hiện thao tác chèn hàng loạt ba tài liệu bằng cách chuyển một mảng tài liệu tới phương thức insert[]. Các tài liệu trong mảng không nhất thiết phải có các trường giống nhau. Chẳng hạn, tài liệu đầu tiên trong mảng có an_idfield và aunitfield. Nhưng tài liệu thứ hai và thứ ba không chứa an_idfield, mongod sẽ tạo the_idfield cho tài liệu thứ hai và thứ ba trong quá trình chèn
db.orders.insert[
[
{ _id: 15, ord_no: 2001, qty: 200, unit: "doz" },
{ ord_no: 2005, qty: 320 },
{ ord_no: 2008, qty: 250, rate:85 }
]
];
đầu ra
BulkWriteResult[{ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 3, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] }]
Các hoạt động chèn ba tài liệu sau đây
{ "_id" : 15, "ord_no" : 2001, "qty" : 200, "unit" : "doz" }
{ "_id" : ObjectId["56755896f61afaaed2aae490"], "ord_no" : 2005, "qty" : 320 }
{ "_id" : ObjectId["56755896f61afaaed2aae491"], "ord_no" : 2008, "qty" : 250, "rate" : 85 }
Lấy dữ liệu nhà hàng từ đây
Cư xử
Viết an toàn
Phương thức insert[] sử dụng lệnh chèn, sử dụng mối quan tâm ghi mặc định. Để chỉ định mối quan tâm ghi khác, hãy bao gồm mối quan tâm ghi trong tham số tùy chọn
Tạo bộ sưu tập
Nếu bộ sưu tập không tồn tại thì phương thức insert[] sẽ tạo bộ sưu tập
Trường _id
Nếu tài liệu không chỉ định trường _id thì MongoDB sẽ thêm trường _id và gán một ObjectId duy nhất cho tài liệu trước khi chèn. Hầu hết các trình điều khiển tạo một ObjectId và chèn trường _id, nhưng mongod sẽ tạo và điền _id nếu trình điều khiển hoặc ứng dụng không
Nếu tài liệu chứa trường _id, thì giá trị _id phải là duy nhất trong bộ sưu tập để tránh lỗi khóa trùng lặp
Để 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 insertOne[]
Một tài liệu trong MongoDB giống như một bản ghi trong MySQL
Tham số đầu tiên của phương thức insertOne[]
là một đối tượng chứa [các] tên và [các] giá trị của từng trường trong tài liệu mà bạn muốn chèn
Nó cũng có chức năng gọi lại nơi bạn có thể làm việc với bất kỳ lỗi nào hoặc kết quả của việc chèn
Thí dụ
Chèn tài liệu vào bộ sưu tập "khách hàng"
var MongoClient = yêu cầu['mongodb']. MongoClient;
var url = "mongodb. //máy chủ cục bộ. 27017/";
MongoClient. kết nối [url, chức năng [err, db] {
nếu [err] ném err;
var dbo = db. db["mydb"];
var myobj = { tên. "Công ty Inc", địa chỉ. "Quốc lộ 37" };
dbo. bộ sưu tập ["khách hàng"]. insertOne[myobj, function[err, res] {
nếu [err] ném err;
bảng điều khiển. log["Đã chèn 1 tài liệu"];
db. Thoát[];
}];
}];
Lưu mã ở trên vào tệp có tên "demo_mongodb_insert. js" và chạy tệp
Chạy "demo_mongodb_insert. js"
C. \Users\Tên của bạn>nút demo_mongodb_insert. js
Cái nào sẽ cho bạn kết quả này
Ghi chú. Nếu bạn cố gắng chèn tài liệu vào một bộ sưu tập không tồn tại, MongoDB sẽ tự động tạo bộ sưu tập
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 insertMany[]
Tham số đầu tiên của phương thức insertMany[]
là một mảng đối tượng, chứa dữ liệu bạn muốn chèn
Nó cũng có chức năng gọi lại nơi bạn có thể làm việc với bất kỳ lỗi nào hoặc kết quả của việc chèn
Thí dụ
Chèn nhiều tài liệu vào bộ sưu tập "khách hàng"
var MongoClient = yêu cầu['mongodb']. MongoClient;
var url = "mongodb. //máy chủ cục bộ. 27017/";
MongoClient. kết nối [url, chức năng [err, db] {
nếu [err] ném err;
var dbo = db. db["mydb"];
var myobj = [
{ Tên. 'John', địa chỉ. 'Quốc lộ 71'},
{ Tên. 'Peter', địa chỉ. 'Phố thấp 4'},
{ 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. 'Sandy', địa chỉ. 'Đại lộ 2'},
{ Tên. 'Betty', địa chỉ. 'Cỏ xanh 1'},
{ Tên. 'Richard', địa chỉ. 'Bầu trời đường 331'},
{ Tên. 'Susan', địa chỉ. 'Một chiều 98'},
{ Tên. 'Vicky', địa chỉ. 'Khu vườn vàng 2'},
{ Tên. 'Ben', địa chỉ. 'Công viên ngõ 38'},
{ Tên. 'William', địa chỉ. 'Trung tâm đường 954'},
{ Tên. 'Chuck', địa chỉ. 'Đường chính 989'},
{ Tên. 'Viola', địa chỉ. 'Đi ngang 1633'}
];
dbo. bộ sưu tập ["khách hàng"]. insertMany[myobj, function[err, res] {
nếu [err] ném err;
bảng điều khiển. log["Số tài liệu đã chèn. " + độ phân giải. insertCount];
db. Thoát[];
}];
}];
Lưu mã ở trên vào tệp có tên "demo_mongodb_insert_multiple. js" và chạy tệp
Chạy "demo_mongodb_insert_multiple. js"
C. \Users\Tên của bạn>nút demo_mongodb_insert_multiple. js
Cái nào sẽ cho bạn kết quả này
Số lượng tài liệu được chèn. 14
đối tượng kết quả
Khi thực thi phương thức insertMany[]
, một đối tượng kết quả được trả về
Đối tượng kết quả chứa thông tin về cách chèn ảnh hưởng đến cơ sở dữ liệu
Đối tượng được trả về từ ví dụ trên trông như thế này
{
kết quả. { Vâng. 1, n. 14 },
hoạt động. [
{ Tên. 'John', địa chỉ. 'Quốc lộ 71', _id. 58fdbf5c0ef8a50b4cdd9a84 },
{ Tên. 'Peter', địa chỉ. 'Lowstreet 4', _id. 58fdbf5c0ef8a50b4cdd9a85 },
{ Tên. 'Amy', địa chỉ. 'Apple st 652', _id. 58fdbf5c0ef8a50b4cdd9a86 },
{ Tên. 'Hannah', địa chỉ. 'Núi 21', _id. 58fdbf5c0ef8a50b4cdd9a87 },
{ Tên. 'Michael', địa chỉ. 'Thung lũng 345', _id. 58fdbf5c0ef8a50b4cdd9a88 },
{ Tên. 'Sandy', địa chỉ. 'Đại lộ 2', _id. 58fdbf5c0ef8a50b4cdd9a89 },
{ Tên. 'Betty', địa chỉ. 'Cỏ xanh 1', _id. 58fdbf5c0ef8a50b4cdd9a8a },
{ Tên. 'Richard', địa chỉ. 'Bầu trời đường 331', _id. 58fdbf5c0ef8a50b4cdd9a8b },
{ Tên. 'Susan', địa chỉ. 'Một chiều 98', _id. 58fdbf5c0ef8a50b4cdd9a8c },
{ Tên. 'Vicky', địa chỉ. 'Khu vườn vàng 2', _id. 58fdbf5c0ef8a50b4cdd9a8d },
{ Tên. 'Ben', địa chỉ. 'Công viên ngõ 38', _id. 58fdbf5c0ef8a50b4cdd9a8e },
{ Tên. 'William', địa chỉ. 'Trung tâm đường 954', _id. 58fdbf5c0ef8a50b4cdd9a8f },
{ Tên. 'Chuck', địa chỉ. 'Đường chính 989', _id. 58fdbf5c0ef8a50b4cdd9a90 },
{ Tên. 'Viola', địa chỉ. 'Đi ngang 1633', _id. 58fdbf5c0ef8a50b4cdd9a91 } ],
đã chèn. 14,
id đã chèn. [
58fdbf5c0ef8a50b4cdd9a84,
58fdbf5c0ef8a50b4cdd9a85,
58fdbf5c0ef8a50b4cdd9a86,
58fdbf5c0ef8a50b4cdd9a87,
58fdbf5c0ef8a50b4cdd9a88,
58fdbf5c0ef8a50b4cdd9a89,
58fdbf5c0ef8a50b4cdd9a8a,
58fdbf5c0ef8a50b4cdd9a8b,
58fdbf5c0ef8a50b4cdd9a8c,
58fdbf5c0ef8a50b4cdd9a8d,
58fdbf5c0ef8a50b4cdd9a8e,
58fdbf5c0ef8a50b4cdd9a8f
58fdbf5c0ef8a50b4cdd9a90,
58fdbf5c0ef8a50b4cdd9a91 ]
}
Các giá trị của các thuộc tính có thể được hiển thị như thế này
Thí dụ
Trả về số tài liệu đã chèn
bảng điều khiển. nhật ký [độ phân giải. được chèn vào]
Cái nào sẽ tạo ra kết quả này
Trường _id
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à như bạn có thể thấy từ đối tượng kết quả, MongoDB đã gán một _id duy nhất cho mỗi tài liệu