Miễn là bạn đồng ý với việc tạo một bản sao của dữ liệu, khung tổng hợp có thể được sử dụng thay thế tại đây. Bạn cũng có tùy chọn để làm nhiều việc hơn với dữ liệu nếu muốn sử dụng các toán tử khác, nhưng toán tử duy nhất bạn cần là $project
. Nó hơi lãng phí về không gian, nhưng có thể nhanh hơn và phù hợp hơn cho một số mục đích sử dụng. Để minh họa, trước tiên tôi sẽ chèn một số dữ liệu mẫu vào bộ sưu tập foo
db.foo.insert[{ 'lat': 1, 'lon': 2, someotherdata : [1, 2, 3] }]
db.foo.insert[{ 'lat': 4, 'lon': 1, someotherdata : [4, 5, 6] }]
Bây giờ, chúng tôi chỉ sử dụng $project
để làm lại các trường lat
và lon
, sau đó gửi chúng đến bộ sưu tập newfoo
db.foo.aggregate[[
{$project : {_id : "$_id", "coords.lat" : "$lat", "coords.lon" : "$lon", "someotherdata" : "$someotherdata" }},
{ $out : "newfoo" }
]]
Sau đó kiểm tra newfoo
để biết dữ liệu đã thay đổi của chúng tôi
db.newfoo.find[]
{ "_id" : ObjectId["544548a71b5cf91c4893eb9a"], "someotherdata" : [ 1, 2, 3 ], "coords" : { "lat" : 1, "lon" : 2 } }
{ "_id" : ObjectId["544548a81b5cf91c4893eb9b"], "someotherdata" : [ 4, 5, 6 ], "coords" : { "lat" : 4, "lon" : 1 } }
Khi bạn hài lòng với dữ liệu mới, bạn có thể sử dụng lệnh
db.foo.aggregate[[
{$project : {_id : "$_id", "coords.lat" : "$lat", "coords.lon" : "$lon", "someotherdata" : "$someotherdata" }},
{ $out : "newfoo" }
]]
1 để loại bỏ dữ liệu cũ và sử dụng dữ liệu mới dưới tên cũ> db.newfoo.renameCollection["foo", true]
{ "ok" : 1 }
> db.foo.find[]
{ "_id" : ObjectId["544548a71b5cf91c4893eb9a"], "someotherdata" : [ 1, 2, 3 ], "coords" : { "lat" : 1, "lon" : 2 } }
{ "_id" : ObjectId["544548a81b5cf91c4893eb9b"], "someotherdata" : [ 4, 5, 6 ], "coords" : { "lat" : 4, "lon" : 1 } }
Một lưu ý cuối cùng - cho đến khi SERVER-7944 hoàn thành, bạn không thể thực hiện tương đương với ảnh chụp nhanh bằng cách gợi ý chỉ mục
db.foo.aggregate[[
{$project : {_id : "$_id", "coords.lat" : "$lat", "coords.lon" : "$lon", "someotherdata" : "$someotherdata" }},
{ $out : "newfoo" }
]]
2 như được đề xuất trong câu trả lời này và do đó, cuối cùng bạn có thể nhấn vào tài liệu nhiều lần nếu hoạt động ở nơi khác khiến nó di chuyển. Vì bạn đang chèn trường db.foo.aggregate[[
{$project : {_id : "$_id", "coords.lat" : "$lat", "coords.lon" : "$lon", "someotherdata" : "$someotherdata" }},
{ $out : "newfoo" }
]]
2 trong ví dụ này nên bất kỳ sự cố nào xảy ra như vậy sẽ gây ra vi phạm khóa duy nhất, vì vậy bạn sẽ không gặp phải trường hợp trùng lặp, nhưng bạn có thể có phiên bản "cũ" của tài liệu. Như mọi khi, hãy kiểm tra kỹ dữ liệu của bạn trước khi bỏ dữ liệu và tốt nhất là sao lưu Phương thức cập nhật [] hoặc lưu [] trong MongoDB được sử dụng để cập nhật Tài liệu trong một Bộ sưu tập
Phương thức update[] cập nhật các giá trị trong Tài liệu đang tồn tại trong khi phương thức save[] thay thế Tài liệu đang tồn tại với Tài liệu đã truyền trong phương thức save[] đó
Phương thức update[] trong MongoDB
Phương thức update[] cập nhật các giá trị trong Document đang tồn tại
cú pháp
Cú pháp cơ bản của phương thức update[] là như sau
>db.COLLECTION_NAME.update[SELECTIOIN_CRITERIA, UPDATED_DATA]
Ví dụ
You follow Collection has mycol name has data after
________số 8_______Ví dụ sau sẽ thiết lập tiêu đề mới 'Hướng dẫn MongoDB mới' của Tài liệu có tiêu đề là 'Tổng quan về MongoDB'
>db.mycol.update[{'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}}]
>db.mycol.find[]
{ "_id" : ObjectId[5983548781331adf45ec5], "title":"New MongoDB Tutorial"}
{ "_id" : ObjectId[5983548781331adf45ec6], "title":"NoSQL Overview"}
{ "_id" : ObjectId[5983548781331adf45ec7], "title":"Tutorials Point Overview"}
>
Theo mặc định, MongoDB sẽ chỉ cập nhật một Document đơn, để cập nhật nhiều Document, bạn thiết lập tham số 'multi' thành true
>db.mycol.update[{'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}},{multi:true}]
Phương thức save[] trong MongoDB
Phương thức lưu [] thay thế Tài liệu đang tồn tại với Tài liệu mới đã được truyền trong phương thức lưu [] này
Sửa đổi một tài liệu hiện có hoặc các tài liệu trong một bộ sưu tập. Phương pháp này có thể sửa đổi các trường cụ thể của một hoặc nhiều tài liệu hiện có hoặc thay thế hoàn toàn một tài liệu hiện có, tùy thuộc vào
Theo mặc định, phương pháp cập nhật một tài liệu duy nhất. Bao gồm tùy chọn cập nhật tất cả các tài liệu phù hợp với tiêu chí truy vấn
cú pháp
Đã thay đổi trong phiên bản 5. 0
Phương thức có dạng sau
db.collection.update[ , , { upsert: , multi: , writeConcern: , collation: , arrayFilters: [ , .. ], hint: , // Added in MongoDB 4.2 let: // Added in MongoDB 5.0 }]
Thông số
Phương thức nhận các tham số sau
Tham số
Loại
Sự miêu tả
tài liệu
Tiêu chí lựa chọn cập nhật. Giống như trong phương pháp có sẵn Khi bạn thực hiện một với
2 và truy vấn không khớp với tài liệu hiện có, MongoDB sẽ từ chối chèn tài liệu mới nếu truy vấn chỉ định điều kiện trên trường db.people.update[ { name: "Andy" }, { $inc: { score: 1 } }, { upsert: true, multi: true }]
3 bằng cách sử dụngdb.people.update[ { name: "Andy" }, { $inc: { score: 1 } }, { upsert: true, multi: true }]
tài liệu hoặc đường dẫn
Các sửa đổi để áp dụng. Có thể là một trong những điều sau đây chỉ chứa Chỉ chứa
4 cặpdb.people.update[ { name: "Andy" }, { $inc: { score: 1 } }, { upsert: true, multi: true }]
[Bắt đầu từ MongoDB 4. 2]
Chỉ chứa các giai đoạn tổng hợp sau và bí danh của nó và bí danh của nó và bí danh của nó
Để biết chi tiết và ví dụ, xem
boolean
Không bắt buộc. Khi
1, hoặcdb.members.insertMany[ [ { "_id" : 1, "member" : "abc123", "status" : "A", "points" : 2, "misc1" : "note to self: confirm status", "misc2" : "Need to activate", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
Tạo một tài liệu mới nếu không có tài liệu nào khớp với
3. Để biết thêm chi tiết xemdb.members.insertMany[ [ { "_id" : 1, "member" : "abc123", "status" : "A", "points" : 2, "misc1" : "note to self: confirm status", "misc2" : "Need to activate", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
Cập nhật một tài liệu duy nhất phù hợp với
3db.members.insertMany[ [ { "_id" : 1, "member" : "abc123", "status" : "A", "points" : 2, "misc1" : "note to self: confirm status", "misc2" : "Need to activate", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
Nếu cả
db.members.insertMany[ [ { "_id" : 1, "member" : "abc123", "status" : "A", "points" : 2, "misc1" : "note to self: confirm status", "misc2" : "Need to activate", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
5 và db.members.insertMany[ [ { "_id" : 1, "member" : "abc123", "status" : "A", "points" : 2, "misc1" : "note to self: confirm status", "misc2" : "Need to activate", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
6 đều đúng và không có tài liệu nào phù hợp với truy vấn, thì thao tác cập nhật chỉ chèn một tài liệu duy nhấtĐể tránh nhiều , đảm bảo rằng [các] trường
db.members.insertMany[ [ { "_id" : 1, "member" : "abc123", "status" : "A", "points" : 2, "misc1" : "note to self: confirm status", "misc2" : "Need to activate", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
3 là. Xem ví dụMặc định là
db.members.insertMany[ [ { "_id" : 1, "member" : "abc123", "status" : "A", "points" : 2, "misc1" : "note to self: confirm status", "misc2" : "Need to activate", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
8, không chèn tài liệu mới khi không tìm thấy kết quả phù hợpboolean
Không bắt buộc. Nếu được đặt thành
1, hãy cập nhật nhiều tài liệu đáp ứng tiêu chí db.members.insertMany[ [ { "_id" : 1, "member" : "abc123", "status" : "A", "points" : 2, "misc1" : "note to self: confirm status", "misc2" : "Need to activate", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
3. Nếu được đặt thành db.members.insertMany[ [ { "_id" : 1, "member" : "abc123", "status" : "A", "points" : 2, "misc1" : "note to self: confirm status", "misc2" : "Need to activate", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
8, hãy cập nhật một tài liệu. Giá trị mặc định là db.members.insertMany[ [ { "_id" : 1, "member" : "abc123", "status" : "A", "points" : 2, "misc1" : "note to self: confirm status", "misc2" : "Need to activate", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
8. Để biết thêm thông tin, xemdb.members.insertMany[ [ { "_id" : 1, "member" : "abc123", "status" : "A", "points" : 2, "misc1" : "note to self: confirm status", "misc2" : "Need to activate", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
tài liệu
Không bắt buộc. Một tài liệu bày tỏ mối quan tâm viết. Bỏ qua để sử dụng mối quan tâm ghi mặc định
3db.members.update[ { }, [ { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } }, { $unset: [ "misc1", "misc2" ] } ], { multi: true }]
Không đặt rõ ràng mối quan tâm ghi cho hoạt động nếu chạy trong một giao dịch. Để sử dụng ghi mối quan tâm với các giao dịch, hãy xem
Để biết ví dụ sử dụng
db.members.update[ { }, [ { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } }, { $unset: [ "misc1", "misc2" ] } ], { multi: true }]
4, hãy xemtài liệu
Không bắt buộc Đối chiếu cho phép người dùng chỉ định các quy tắc dành riêng cho ngôn ngữ để so sánh chuỗi, chẳng hạn như quy tắc cho chữ cái và dấu trọng âm Để biết ví dụ sử dụng
5, hãy xemdb.members.update[ { }, [ { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } }, { $unset: [ "misc1", "misc2" ] } ], { multi: true }]
mảng
Không bắt buộc. Mảng tài liệu bộ lọc xác định phần tử mảng nào cần sửa đổi cho thao tác cập nhật trên trường mảng Trong , hãy sử dụng the để xác định mã định danh để chỉ cập nhật những phần tử mảng khớp với tài liệu bộ lọc tương ứng trong
7db.members.update[ { }, [ { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } }, { $unset: [ "misc1", "misc2" ] } ], { multi: true }]
Ghi chú
Bạn không thể có tài liệu bộ lọc mảng cho mã định danh nếu mã định danh không được đưa vào tài liệu cập nhật
Ví dụ, xem
Tài liệu hoặc chuỗi
Không bắt buộc. Một tài liệu hoặc chuỗi chỉ định chỉ mục sẽ sử dụng để hỗ trợ Tùy chọn có thể lấy tài liệu đặc tả chỉ mục hoặc chuỗi tên chỉ mục Nếu bạn chỉ định một chỉ mục không tồn tại, lỗi hoạt động Ví dụ, xem Mới trong phiên bản 4. 2
tài liệu
Không bắt buộc Chỉ định một tài liệu với một danh sách các biến. Điều này cho phép bạn cải thiện khả năng đọc lệnh bằng cách tách các biến khỏi văn bản truy vấn Cú pháp tài liệu là{ : , ..., : }
Biến được đặt thành giá trị mà biểu thức trả về và không thể thay đổi sau đó
Để truy cập giá trị của một biến trong lệnh, hãy sử dụng tiền tố ký hiệu đô la kép [
{ "_id" : 1, "member" : "abc123", "status" : "Modified", "points" : 2, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "note to self: confirm status", "Need to activate" ] }{ "_id" : 2, "member" : "xyz123", "status" : "Modified", "points" : 60, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "reminder: ping me at 100pts", "Some random comment" ] }
0] cùng với tên biến của bạn ở dạng { "_id" : 1, "member" : "abc123", "status" : "Modified", "points" : 2, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "note to self: confirm status", "Need to activate" ] }{ "_id" : 2, "member" : "xyz123", "status" : "Modified", "points" : 60, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "reminder: ping me at 100pts", "Some random comment" ] }
1. Ví dụ. { "_id" : 1, "member" : "abc123", "status" : "Modified", "points" : 2, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "note to self: confirm status", "Need to activate" ] }{ "_id" : 2, "member" : "xyz123", "status" : "Modified", "points" : 60, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "reminder: ping me at 100pts", "Some random comment" ] }
2Ghi chú
Để sử dụng một biến để lọc kết quả, bạn phải truy cập vào biến đó trong toán tử
Để biết ví dụ hoàn chỉnh về cách sử dụng
{ "_id" : 1, "member" : "abc123", "status" : "Modified", "points" : 2, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "note to self: confirm status", "Need to activate" ] }{ "_id" : 2, "member" : "xyz123", "status" : "Modified", "points" : 60, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "reminder: ping me at 100pts", "Some random comment" ] }
4 và các biến, hãy xemMới trong phiên bản 5. 0
trả lại
Phương thức trả về một tài liệu chứa trạng thái của hoạt động
Kiểm soát truy cập
Khi triển khai chạy với , người dùng phải có quyền truy cập bao gồm các đặc quyền sau
hành động trên [các] bộ sưu tập được chỉ định
hành động trên [các] bộ sưu tập được chỉ định
hành động đối với [các] bộ sưu tập được chỉ định nếu hoạt động dẫn đến upsert
Vai trò tích hợp cung cấp các đặc quyền cần thiết
Cư xử
Sử dụng { "_id" : 1, "member" : "abc123", "status" : "Modified", "points" : 2, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "note to self: confirm status", "Need to activate" ] }{ "_id" : 2, "member" : "xyz123", "status" : "Modified", "points" : 60, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "reminder: ping me at 100pts", "Some random comment" ] }
3 trong Bản cập nhật với db.students3.insertMany[ [ { "_id" : 1, "tests" : [ 95, 92, 90 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "tests" : [ 94, 88, 90 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 3, "tests" : [ 70, 75, 82 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
2
{ "_id" : 1, "member" : "abc123", "status" : "Modified", "points" : 2, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "note to self: confirm status", "Need to activate" ] }{ "_id" : 2, "member" : "xyz123", "status" : "Modified", "points" : 60, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "reminder: ping me at 100pts", "Some random comment" ] }
db.students3.insertMany[ [ { "_id" : 1, "tests" : [ 95, 92, 90 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "tests" : [ 94, 88, 90 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 3, "tests" : [ 70, 75, 82 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
Cố gắng sử dụng toán tử $expr với cờ upsert được đặt thành
db.members.insertMany[ [ { "_id" : 1, "member" : "abc123", "status" : "A", "points" : 2, "misc1" : "note to self: confirm status", "misc2" : "Need to activate", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
1 sẽ tạo ra lỗi. Bộ sưu tập được chia nhỏ
Để sử dụng với
db.students3.insertMany[ [ { "_id" : 1, "tests" : [ 95, 92, 90 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "tests" : [ 94, 88, 90 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 3, "tests" : [ 70, 75, 82 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
5 trên bộ sưu tập được phân đoạn, bạn phải bao gồm kết quả khớp chính xác trên trường db.people.update[ { name: "Andy" }, { $inc: { score: 1 } }, { upsert: true, multi: true }]
3 hoặc nhắm mục tiêu một phân đoạn duy nhất [chẳng hạn như bằng cách bao gồm khóa phân đoạn]Khi thực hiện các hoạt động cập nhật [chứ không phải hoạt động thay thế tài liệu], có thể nhắm mục tiêu nhiều phân đoạn
Mẹo
Xem thêm
Thay thế các thao tác tài liệu trên bộ sưu tập được phân mảnh
Bắt đầu từ MongoDB 4. 2, thay thế hoạt động tài liệu cố gắng nhắm mục tiêu một phân đoạn duy nhất, trước tiên bằng cách sử dụng bộ lọc truy vấn. Nếu thao tác không thể nhắm mục tiêu một phân đoạn duy nhất bằng bộ lọc truy vấn, thì thao tác đó sẽ cố gắng nhắm mục tiêu bằng tài liệu thay thế
Trong các phiên bản trước, hoạt động cố gắng nhắm mục tiêu bằng cách sử dụng tài liệu thay thế
db.members.insertMany[ [ { "_id" : 1, "member" : "abc123", "status" : "A", "points" : 2, "misc1" : "note to self: confirm status", "misc2" : "Need to activate", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
5 trên Bộ sưu tập phân đoạn
db.members.insertMany[ [ { "_id" : 1, "member" : "abc123", "status" : "A", "points" : 2, "misc1" : "note to self: confirm status", "misc2" : "Need to activate", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
Đối với một hoạt động bao gồm và nằm trong bộ sưu tập được phân đoạn, bạn phải bao gồm khóa phân đoạn đầy đủ trong
db.students3.update[ { }, [ { $set: { average : { $trunc: [ { $avg: "$tests" }, 0 ] }, lastUpdate: "$$NOW" } }, { $set: { grade: { $switch: { branches: [ { case: { $gte: [ "$average", 90 ] }, then: "A" }, { case: { $gte: [ "$average", 80 ] }, then: "B" }, { case: { $gte: [ "$average", 70 ] }, then: "C" }, { case: { $gte: [ "$average", 60 ] }, then: "D" } ], default: "F" } } } } ], { multi: true }]
2Đối với một hoạt động cập nhật
Đối với thao tác thay thế tài liệu [bắt đầu từ MongoDB 4. 2]
Tuy nhiên, bắt đầu từ phiên bản 4. 4, các tài liệu trong bộ sưu tập phân đoạn có thể được. Để nhắm mục tiêu tài liệu thiếu khóa phân đoạn, bạn có thể sử dụng đối sánh đẳng thức
db.students3.update[ { }, [ { $set: { average : { $trunc: [ { $avg: "$tests" }, 0 ] }, lastUpdate: "$$NOW" } }, { $set: { grade: { $switch: { branches: [ { case: { $gte: [ "$average", 90 ] }, then: "A" }, { case: { $gte: [ "$average", 80 ] }, then: "B" }, { case: { $gte: [ "$average", 70 ] }, then: "C" }, { case: { $gte: [ "$average", 60 ] }, then: "D" } ], default: "F" } } } } ], { multi: true }]
3kết hợp với một điều kiện lọc khác [chẳng hạn như trên trường db.people.update[ { name: "Andy" }, { $inc: { score: 1 } }, { upsert: true, multi: true }]
3]. Ví dụ{ _id: , : null } // _id of the document missing shard key
Sửa đổi khóa phân mảnh
Bắt đầu từ MongoDB 4. 2, bạn có thể cập nhật giá trị khóa phân đoạn của tài liệu trừ khi trường khóa phân đoạn là trường
db.people.update[ { name: "Andy" }, { $inc: { score: 1 } }, { upsert: true, multi: true }]
3 bất biến. Trong MongoDB 4. 2 trở về trước, giá trị trường khóa phân đoạn của tài liệu là không thay đổiĐể sửa đổi giá trị khóa phân đoạn hiện có với
Bạn phải chạy trên một. Không thực hiện thao tác trực tiếp trên phân đoạn
Bạn phải chạy trong giao dịch hoặc dưới dạng ghi có thể thử lại
Bạn phải chỉ định
5db.students3.insertMany[ [ { "_id" : 1, "tests" : [ 95, 92, 90 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "tests" : [ 94, 88, 90 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 3, "tests" : [ 70, 75, 82 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
Bạn phải bao gồm một đẳng thức trên khóa phân đoạn đầy đủ
Mẹo
Vì giá trị khóa bị thiếu được trả về như một phần của đối sánh đẳng thức null, nên để tránh cập nhật khóa có giá trị null, hãy bao gồm các điều kiện truy vấn bổ sung [chẳng hạn như trên trường
db.people.update[ { name: "Andy" }, { $inc: { score: 1 } }, { upsert: true, multi: true }]
3] khi thích hợpXem thêm
Thiếu khóa phân mảnh
Bắt đầu từ phiên bản 4. 4, các tài liệu trong bộ sưu tập phân đoạn có thể được. Để sử dụng để đặt khóa phân đoạn bị thiếu của tài liệu, bạn phải chạy trên một. Không thực hiện thao tác trực tiếp trên phân đoạn
Ngoài ra, các yêu cầu sau đây cũng được áp dụng
Nhiệm vụ
Yêu cầu
Để đặt thành
3db.students3.update[ { }, [ { $set: { average : { $trunc: [ { $avg: "$tests" }, 0 ] }, lastUpdate: "$$NOW" } }, { $set: { grade: { $switch: { branches: [ { case: { $gte: [ "$average", 90 ] }, then: "A" }, { case: { $gte: [ "$average", 80 ] }, then: "B" }, { case: { $gte: [ "$average", 70 ] }, then: "C" }, { case: { $gte: [ "$average", 60 ] }, then: "D" } ], default: "F" } } } } ], { multi: true }]
Có thể chỉ định
04{ : , ..., : }
Yêu cầu bộ lọc đẳng thức trên khóa phân đoạn đầy đủ nếu
db.people.update[ { name: "Andy" }, { $inc: { score: 1 } }, { upsert: true, multi: true }]
2Để đặt thành giá trị không phải ______41_______3
Phải được thực hiện bên trong giao dịch hoặc dưới dạng ghi có thể thử lại Phải ghi rõ
5db.students3.insertMany[ [ { "_id" : 1, "tests" : [ 95, 92, 90 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "tests" : [ 94, 88, 90 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 3, "tests" : [ 70, 75, 82 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
Yêu cầu bộ lọc đẳng thức trên khóa phân đoạn đầy đủ nếu một trong hai
2, hoặcdb.people.update[ { name: "Andy" }, { $inc: { score: 1 } }, { upsert: true, multi: true }]
nếu sử dụng tài liệu thay thế và giá trị khóa phân đoạn mới thuộc về một phân đoạn khác
Mẹo
Vì giá trị khóa bị thiếu được trả về như một phần của đối sánh đẳng thức null, nên để tránh cập nhật khóa có giá trị null, hãy bao gồm các điều kiện truy vấn bổ sung [chẳng hạn như trên trường
db.people.update[ { name: "Andy" }, { $inc: { score: 1 } }, { upsert: true, multi: true }]
3] khi thích hợpXem thêm
giao dịch
có thể được sử dụng bên trong các giao dịch nhiều tài liệu
Quan trọng
Trong hầu hết các trường hợp, giao dịch nhiều tài liệu phát sinh chi phí hiệu suất cao hơn so với ghi một tài liệu và tính khả dụng của các giao dịch nhiều tài liệu không phải là sự thay thế cho thiết kế lược đồ hiệu quả. Đối với nhiều trường hợp, sẽ tiếp tục tối ưu cho dữ liệu và trường hợp sử dụng của bạn. Nghĩa là, trong nhiều tình huống, việc lập mô hình dữ liệu của bạn một cách thích hợp sẽ giảm thiểu nhu cầu giao dịch nhiều tài liệu
Để biết các cân nhắc sử dụng giao dịch bổ sung [chẳng hạn như giới hạn thời gian chạy và giới hạn kích thước oplog], hãy xem thêm Cân nhắc sản xuất
Upsert trong Giao dịch
Bắt đầu từ MongoDB 4. 4, bạn có thể tạo các bộ sưu tập và chỉ mục bên trong a nếu giao dịch không phải là giao dịch ghi chéo
Cụ thể, trong MongoDB 4. 4 trở lên, với
db.people.update[ { name: "Andy" }, { $inc: { score: 1 } }, { upsert: true, multi: true }]
2 có thể chạy trên bộ sưu tập hiện có hoặc bộ sưu tập không tồn tại. Nếu chạy trên một bộ sưu tập không tồn tại, thao tác sẽ tạo bộ sưu tậpTrong MongoDB 4. 2 trở về trước, thao tác phải được chạy trên bộ sưu tập hiện có
Mẹo
Xem thêm
Viết mối quan tâm và giao dịch
Không đặt rõ ràng mối quan tâm ghi cho hoạt động nếu chạy trong một giao dịch. Để sử dụng ghi mối quan tâm với các giao dịch, hãy xem
ví dụ
Các tab sau hiển thị nhiều hoạt động phổ biến
Trong , tạo bộ sưu tập
{ : , ..., : }
16 chứa các tài liệu sau. Lệnh này trước tiên xóa tất cả các tài liệu đã tồn tại trước đó khỏi bộ sưu tập { : , ..., : }
16db.books.remove[{}];db.books.insertMany[[ { "_id" : 1, "item" : "TBD", "stock" : 0, "info" : { "publisher" : "1111", "pages" : 430 }, "tags" : [ "technology", "computer" ], "ratings" : [ { "by" : "ijk", "rating" : 4 }, { "by" : "lmn", "rating" : 5 } ], "reorder" : false }, { "_id" : 2, "item" : "XYZ123", "stock" : 15, "info" : { "publisher" : "5555", "pages" : 150 }, "tags" : [ ], "ratings" : [ { "by" : "xyz", "rating" : 5 } ], "reorder" : false }]];
Chèn một tài liệu mới nếu không có kết quả phù hợp [db.students3.insertMany[ [ { "_id" : 1, "tests" : [ 95, 92, 90 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "tests" : [ 94, 88, 90 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 3, "tests" : [ 70, 75, 82 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
2]
db.students3.insertMany[ [ { "_id" : 1, "tests" : [ 95, 92, 90 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "tests" : [ 94, 88, 90 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 3, "tests" : [ 70, 75, 82 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
Khi bạn chỉ định tùy chọn
Nếu [các] tài liệu khớp với tiêu chí truy vấn, hãy thực hiện cập nhật
Nếu không có tài liệu nào phù hợp với tiêu chí truy vấn, hãy chèn một tài liệu
Ghi chú
Nếu nhiều tài liệu giống hệt nhau được phát hành gần như cùng một lúc, thì có thể sử dụng with để tạo tài liệu trùng lặp. Xem để biết thêm thông tin
Nếu bạn chỉ định
db.people.update[ { name: "Andy" }, { $inc: { score: 1 } }, { upsert: true, multi: true }]
2 trên bộ sưu tập được phân đoạn, bạn phải bao gồm khóa phân đoạn đầy đủ trong db.students3.update[ { }, [ { $set: { average : { $trunc: [ { $avg: "$tests" }, 0 ] }, lastUpdate: "$$NOW" } }, { $set: { grade: { $switch: { branches: [ { case: { $gte: [ "$average", 90 ] }, then: "A" }, { case: { $gte: [ "$average", 80 ] }, then: "B" }, { case: { $gte: [ "$average", 70 ] }, then: "C" }, { case: { $gte: [ "$average", 60 ] }, then: "D" } ], default: "F" } } } } ], { multi: true }]
2. Để biết hành vi bổ sung trên bộ sưu tập được phân đoạn, hãy xemCác tab sau giới thiệu nhiều cách sử dụng khác nhau của công cụ sửa đổi
db.members.insertMany[ [ { "_id" : 1, "member" : "abc123", "status" : "A", "points" : 2, "misc1" : "note to self: confirm status", "misc2" : "Need to activate", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
5 vớiUpsert với Unique Index
Khi sử dụng tùy chọn với phương thức và không sử dụng trên [các] trường truy vấn, nhiều trường hợp thao tác với [các] trường truy vấn tương tự có thể dẫn đến việc chèn các tài liệu trùng lặp trong một số trường hợp nhất định
Xem xét một ví dụ trong đó không tồn tại tài liệu có tên
{ : , ..., : }
29 và nhiều khách hàng đưa ra lệnh sau gần như cùng một lúcdb.people.update[ { name: "Andy" }, { $inc: { score: 1 } }, { upsert: true, multi: true }]
Nếu tất cả các thao tác kết thúc giai đoạn truy vấn trước khi bất kỳ máy khách nào chèn dữ liệu thành công và không có trường nào trên trường
{ : , ..., : }
31, thì mỗi thao tác có thể dẫn đến một thao tác chèn, tạo ra nhiều tài liệu với { : , ..., : }
33Để đảm bảo rằng chỉ có một tài liệu như vậy được tạo và thay vào đó, các hoạt động khác sẽ cập nhật tài liệu mới này, hãy tạo một trường
{ : , ..., : }
31. Điều này đảm bảo rằng chỉ một tài liệu có { : , ..., : }
33 được cho phép trong bộ sưu tậpVới chỉ mục duy nhất này tại chỗ, nhiều hoạt động hiện thể hiện hành vi sau
Chính xác một thao tác sẽ chèn thành công một tài liệu mới
Tất cả các hoạt động khác sẽ cập nhật tài liệu mới được chèn, tăng giá trị
40{ : , ..., : }
Mẹo
Xem thêm
Cập nhật với đường ống tổng hợp
Bắt đầu từ MongoDB 4. 2, phương pháp này có thể chấp nhận một quy trình tổng hợp
{ : , ..., : }
43 chỉ định các sửa đổi để thực hiện. Các đường ống có thể bao gồm các giai đoạn sauvà bí danh của nó
và bí danh của nó
và bí danh của nó
Việc sử dụng quy trình tổng hợp cho phép đưa ra câu lệnh cập nhật rõ ràng hơn, chẳng hạn như thể hiện các cập nhật có điều kiện dựa trên giá trị trường hiện tại hoặc cập nhật một trường bằng cách sử dụng giá trị của [các] trường khác
Sửa đổi một trường bằng cách sử dụng các giá trị của các trường khác trong tài liệu
Tạo bộ sưu tập
{ : , ..., : }
50 với các tài liệu saudb.members.insertMany[ [ { "_id" : 1, "member" : "abc123", "status" : "A", "points" : 2, "misc1" : "note to self: confirm status", "misc2" : "Need to activate", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
Giả sử rằng thay vì các trường
{ : , ..., : }
51 và { : , ..., : }
52 riêng biệt, bạn muốn tập hợp các trường này vào một trường { : , ..., : }
53 mới. Hoạt động cập nhật sau đây sử dụng một đường dẫn tổng hợp đểthêm trường
53 mới và đặt trường{ : , ..., : }
55{ : , ..., : }
loại bỏ các trường
51 và{ : , ..., : }
52 cho tất cả các tài liệu trong bộ sưu tập{ : , ..., : }
db.members.update[ { }, [ { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } }, { $unset: [ "misc1", "misc2" ] } ], { multi: true }]
Ghi chú
db.people.update[ { name: "Andy" }, { $inc: { score: 1 } }, { upsert: true, multi: true }]
6 và db.people.update[ { name: "Andy" }, { $inc: { score: 1 } }, { upsert: true, multi: true }]
8 được sử dụng trong đường ống đề cập đến các giai đoạn tổng hợp và tương ứng, chứ không phải các toán tử cập nhật vàGiai đoạn đầuSân khấu
tạo một trường mảng mới
53 có các phần tử là nội dung hiện tại của các trường{ : , ..., : }
51 và{ : , ..., : }
52 và{ : , ..., : }
đặt trường
55 thành giá trị của biến tổng hợp. Biến tổng hợp phân giải thành giá trị ngày giờ hiện tại và giữ nguyên trong suốt quy trình. Để truy cập các biến tổng hợp, hãy đặt trước biến bằng ký hiệu đô la kép{ : , ..., : }
0 và đặt trong dấu ngoặc kép{ "_id" : 1, "member" : "abc123", "status" : "Modified", "points" : 2, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "note to self: confirm status", "Need to activate" ] }{ "_id" : 2, "member" : "xyz123", "status" : "Modified", "points" : 60, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "reminder: ping me at 100pts", "Some random comment" ] }
{ : , ..., : }
51 và { : , ..., : }
52Sau lệnh, bộ sưu tập chứa các tài liệu sau
{ "_id" : 1, "member" : "abc123", "status" : "Modified", "points" : 2, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "note to self: confirm status", "Need to activate" ] }{ "_id" : 2, "member" : "xyz123", "status" : "Modified", "points" : 60, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "reminder: ping me at 100pts", "Some random comment" ] }
Mẹo
Xem thêm
Cập nhật với quy trình tổng hợp
Thực hiện cập nhật có điều kiện dựa trên giá trị trường hiện tại
Tạo bộ sưu tập
{ : , ..., : }
75 với các tài liệu saudb.students3.insertMany[ [ { "_id" : 1, "tests" : [ 95, 92, 90 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "tests" : [ 94, 88, 90 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 3, "tests" : [ 70, 75, 82 ], "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
Sử dụng đường dẫn tổng hợp, bạn có thể cập nhật tài liệu với điểm trung bình và điểm chữ được tính toán
db.students3.update[ { }, [ { $set: { average : { $trunc: [ { $avg: "$tests" }, 0 ] }, lastUpdate: "$$NOW" } }, { $set: { grade: { $switch: { branches: [ { case: { $gte: [ "$average", 90 ] }, then: "A" }, { case: { $gte: [ "$average", 80 ] }, then: "B" }, { case: { $gte: [ "$average", 70 ] }, then: "C" }, { case: { $gte: [ "$average", 60 ] }, then: "D" } ], default: "F" } } } } ], { multi: true }]
Ghi chú
db.people.update[ { name: "Andy" }, { $inc: { score: 1 } }, { upsert: true, multi: true }]
6 được sử dụng trong quy trình đề cập đến giai đoạn tổng hợp chứ không phải toán tử cập nhậtGiai đoạn đầuSân khấu
tính toán trường mới
80 dựa trên giá trị trung bình của trường{ : , ..., : }
81. Xem để biết thêm thông tin về toán tử tổng hợp{ : , ..., : }
82 và để biết thêm thông tin về toán tử tổng hợp cắt ngắn{ : , ..., : }
84{ : , ..., : }
đặt trường
55 thành giá trị của biến tổng hợp. Biến tổng hợp phân giải thành giá trị ngày giờ hiện tại và giữ nguyên trong suốt quy trình. Để truy cập các biến tổng hợp, hãy đặt trước biến bằng ký hiệu đô la kép{ : , ..., : }
0 và đặt trong dấu ngoặc kép{ "_id" : 1, "member" : "abc123", "status" : "Modified", "points" : 2, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "note to self: confirm status", "Need to activate" ] }{ "_id" : 2, "member" : "xyz123", "status" : "Modified", "points" : 60, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "reminder: ping me at 100pts", "Some random comment" ] }
{ : , ..., : }
91 dựa trên trường { : , ..., : }
80 được tính toán trong giai đoạn trước. Xem để biết thêm thông tin về toán tử tổng hợp { : , ..., : }
93Sau lệnh, bộ sưu tập chứa các tài liệu sau
{ : , ..., : }
0Mẹo
Xem thêm
Cập nhật với quy trình tổng hợp
Chỉ định db.members.update[ { }, [ { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } }, { $unset: [ "misc1", "misc2" ] } ], { multi: true }]
7 cho hoạt động cập nhật mảng
db.members.update[ { }, [ { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } }, { $unset: [ "misc1", "misc2" ] } ], { multi: true }]
Trong tài liệu cập nhật, hãy sử dụng toán tử vị trí đã lọc để xác định mã định danh, sau đó bạn tham chiếu mã định danh này trong tài liệu bộ lọc mảng. Bạn không thể có tài liệu bộ lọc mảng cho mã định danh nếu mã định danh không được đưa vào tài liệu cập nhật
Ghi chú
{ : , ..., : }
97 phải bắt đầu bằng một chữ cái viết thường và chỉ chứa các ký tự chữ và sốBạn có thể bao gồm cùng một số nhận dạng nhiều lần trong tài liệu cập nhật; . Tức là bạn không thể chỉ định nhiều tài liệu bộ lọc mảng cho cùng một mã định danh. Ví dụ: nếu câu lệnh cập nhật bao gồm mã định danh
{ : , ..., : }
99 [có thể nhiều lần], bạn không thể chỉ định thông tin sau cho db.members.update[ { }, [ { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } }, { $unset: [ "misc1", "misc2" ] } ], { multi: true }]
7 bao gồm 2 tài liệu bộ lọc riêng biệt cho { : , ..., : }
99{ : , ..., : }
1Tuy nhiên, bạn có thể chỉ định các điều kiện kết hợp trên cùng một mã định danh trong một tài liệu bộ lọc, chẳng hạn như trong các ví dụ sau
{ : , ..., : }
2db.members.update[ { }, [ { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } }, { $unset: [ "misc1", "misc2" ] } ], { multi: true }]
7 không có sẵn cho các bản cập nhật sử dụng đường dẫn tổng hợpCập nhật các yếu tố phù hợp với tiêu chí db.members.update[ { }, [ { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } }, { $unset: [ "misc1", "misc2" ] } ], { multi: true }]
7
db.members.update[ { }, [ { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } }, { $unset: [ "misc1", "misc2" ] } ], { multi: true }]
Để cập nhật tất cả các phần tử mảng khớp với một tiêu chí đã chỉ định, hãy sử dụng tham số
Trong , tạo bộ sưu tập
{ _id: , : null } // _id of the document missing shard key
05 với các tài liệu sau{ : , ..., : }
3Để cập nhật tất cả các phần tử lớn hơn hoặc bằng
{ _id: , : null } // _id of the document missing shard key
06 trong mảng { _id: , : null } // _id of the document missing shard key
07, hãy sử dụng toán tử vị trí đã lọc với tùy chọn db.members.update[ { }, [ { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } }, { $unset: [ "misc1", "misc2" ] } ], { multi: true }]
7{ : , ..., : }
4Sau khi hoạt động, bộ sưu tập chứa các tài liệu sau
{ : , ..., : }
5Cập nhật các thành phần cụ thể của một mảng tài liệu
Bạn cũng có thể sử dụng tham số để cập nhật các trường tài liệu cụ thể trong một mảng tài liệu
Trong , tạo bộ sưu tập
{ _id: , : null } // _id of the document missing shard key
11 với các tài liệu sau{ : , ..., : }
6Để sửa đổi giá trị của trường
{ _id: , : null } // _id of the document missing shard key
12 cho tất cả các phần tử trong mảng { _id: , : null } // _id of the document missing shard key
07 trong đó điểm lớn hơn hoặc bằng { _id: , : null } // _id of the document missing shard key
14, hãy sử dụng toán tử vị trí được lọc với ____26_______7{ : , ..., : }
7Sau khi hoạt động, bộ sưu tập có các tài liệu sau
{ : , ..., : }
8Chỉ định db.members.update[ { }, [ { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } }, { $unset: [ "misc1", "misc2" ] } ], { multi: true }]
9 cho Hoạt động cập nhật
db.members.update[ { }, [ { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } }, { $unset: [ "misc1", "misc2" ] } ], { multi: true }]
Mới trong phiên bản 4. 2
Trong , tạo bộ sưu tập
{ : , ..., : }
50 với các tài liệu sau{ : , ..., : }
9Tạo các chỉ mục sau trên bộ sưu tập
{ _id: , : null } // _id of the document missing shard key
0Thao tác cập nhật sau rõ ràng để sử dụng chỉ mục
{ _id: , : null } // _id of the document missing shard key
20Ghi chú
Nếu bạn chỉ định một chỉ mục không tồn tại, lỗi hoạt động
{ _id: , : null } // _id of the document missing shard key
1Lệnh cập nhật trả về như sau
{ _id: , : null } // _id of the document missing shard key
2Để xem chỉ số được sử dụng, hãy chạy trên hoạt động
{ _id: , : null } // _id of the document missing shard key
3Không sửa đổi các tài liệu
Sử dụng các biến trong { "_id" : 1, "member" : "abc123", "status" : "Modified", "points" : 2, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "note to self: confirm status", "Need to activate" ] }{ "_id" : 2, "member" : "xyz123", "status" : "Modified", "points" : 60, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "reminder: ping me at 100pts", "Some random comment" ] }
4
{ "_id" : 1, "member" : "abc123", "status" : "Modified", "points" : 2, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "note to self: confirm status", "Need to activate" ] }{ "_id" : 2, "member" : "xyz123", "status" : "Modified", "points" : 60, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "reminder: ping me at 100pts", "Some random comment" ] }
Mới trong phiên bản 5. 0
Để xác định các biến mà bạn có thể truy cập ở nơi khác trong lệnh, hãy sử dụng tùy chọn
Ghi chú
Để lọc kết quả bằng một biến, bạn phải truy cập biến đó trong toán tử
Tạo bộ sưu tập
{ _id: , : null } // _id of the document missing shard key
25{ _id: , : null } // _id of the document missing shard key
4Ví dụ sau xác định các biến
{ _id: , : null } // _id of the document missing shard key
26 và { _id: , : null } // _id of the document missing shard key
27 trong { "_id" : 1, "member" : "abc123", "status" : "Modified", "points" : 2, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "note to self: confirm status", "Need to activate" ] }{ "_id" : 2, "member" : "xyz123", "status" : "Modified", "points" : 60, "lastUpdate" : ISODate["2020-01-23T05:11:45.784Z"], "comments" : [ "reminder: ping me at 100pts", "Some random comment" ] }
4 và sử dụng các biến để thay đổi hương vị bánh từ anh đào sang cam{ _id: , : null } // _id of the document missing shard key
5Ghi đè mối quan tâm ghi mặc định
Thao tác sau đây đối với bộ bản sao chỉ định mối quan tâm ghi của
{ _id: , : null } // _id of the document missing shard key
29 với { _id: , : null } // _id of the document missing shard key
30 trong 5000 mili giây. Thao tác này sẽ trả về sau khi ghi lan truyền đến cả chính và một phụ hoặc hết thời gian chờ sau 5 giây{ _id: , : null } // _id of the document missing shard key
6Chỉ định đối chiếu
Chỉ định sử dụng cho hoạt động
Đối chiếu cho phép người dùng chỉ định các quy tắc dành riêng cho ngôn ngữ để so sánh chuỗi, chẳng hạn như quy tắc cho chữ cái và dấu trọng âm
Tùy chọn đối chiếu có cú pháp sau
{ _id: , : null } // _id of the document missing shard key
7Khi chỉ định đối chiếu, trường
{ _id: , : null } // _id of the document missing shard key
31 là bắt buộc; . Để biết mô tả về các trường, xemNếu đối chiếu không được chỉ định nhưng bộ sưu tập có đối chiếu mặc định [xem ], thao tác sẽ sử dụng đối chiếu được chỉ định cho bộ sưu tập
Nếu không có đối chiếu nào được chỉ định cho tập hợp hoặc cho các hoạt động, MongoDB sử dụng so sánh nhị phân đơn giản được sử dụng trong các phiên bản trước để so sánh chuỗi
Bạn không thể chỉ định nhiều đối chiếu cho một thao tác. Ví dụ: bạn không thể chỉ định các đối chiếu khác nhau cho mỗi trường hoặc nếu thực hiện tìm kiếm với một sắp xếp, bạn không thể sử dụng một đối chiếu cho tìm kiếm và một đối chiếu khác cho sắp xếp
Trong , tạo một bộ sưu tập có tên
{ _id: , : null } // _id of the document missing shard key
34 với các tài liệu sau{ _id: , : null } // _id of the document missing shard key
8Hoạt động sau đây bao gồm tùy chọn và đặt
db.members.insertMany[ [ { "_id" : 1, "member" : "abc123", "status" : "A", "points" : 2, "misc1" : "note to self: confirm status", "misc2" : "Need to activate", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
6 thành db.members.insertMany[ [ { "_id" : 1, "member" : "abc123", "status" : "A", "points" : 2, "misc1" : "note to self: confirm status", "misc2" : "Need to activate", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment", "lastUpdate" : ISODate["2019-01-01T00:00:00Z"] }] ]
1 để cập nhật tất cả các tài liệu phù hợp{ _id: , : null } // _id of the document missing shard key
9Hoạt động trả về tài liệu sau, cho biết rằng cả ba tài liệu trong bộ sưu tập đã được cập nhật
db.books.remove[{}];db.books.insertMany[[ { "_id" : 1, "item" : "TBD", "stock" : 0, "info" : { "publisher" : "1111", "pages" : 430 }, "tags" : [ "technology", "computer" ], "ratings" : [ { "by" : "ijk", "rating" : 4 }, { "by" : "lmn", "rating" : 5 } ], "reorder" : false }, { "_id" : 2, "item" : "XYZ123", "stock" : 15, "info" : { "publisher" : "5555", "pages" : 150 }, "tags" : [ ], "ratings" : [ { "by" : "xyz", "rating" : 5 } ], "reorder" : false }]];
0Sau khi hoạt động, bộ sưu tập chứa các tài liệu sau
db.books.remove[{}];db.books.insertMany[[ { "_id" : 1, "item" : "TBD", "stock" : 0, "info" : { "publisher" : "1111", "pages" : 430 }, "tags" : [ "technology", "computer" ], "ratings" : [ { "by" : "ijk", "rating" : 4 }, { "by" : "lmn", "rating" : 5 } ], "reorder" : false }, { "_id" : 2, "item" : "XYZ123", "stock" : 15, "info" : { "publisher" : "5555", "pages" : 150 }, "tags" : [ ], "ratings" : [ { "by" : "xyz", "rating" : 5 } ], "reorder" : false }]];
1Viết kết quả
Kết quả thành công
Phương thức trả về một đối tượng chứa trạng thái của hoạt động. Sau khi thành công, đối tượng chứa số lượng tài liệu phù hợp với điều kiện truy vấn, số lượng tài liệu được chèn bởi bản cập nhật và số lượng tài liệu được sửa đổi