Cập nhật dữ liệu mongodb

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 latlon, 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

db.people.update[   { name: "Andy" },   { $inc: { score: 1 } },   {     upsert: true,     multi: true   }]
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ụng

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

db.people.update[   { name: "Andy" },   { $inc: { score: 1 } },   {     upsert: true,     multi: true   }]
4 cặp

[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

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, hoặc

  • 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

    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. Để biết thêm chi tiết xem

  • Cập nhật một tài liệu duy nhất phù hợp vớ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"] }] ]
    3

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ợp

boolean

Không bắt buộc. 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"] }] ]
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, xem

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

db.members.update[   { },   [      { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } },      { $unset: [ "misc1", "misc2" ] }   ],   { multi: true }]
3

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 xem

tà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

db.members.update[   { },   [      { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } },      { $unset: [ "misc1", "misc2" ] }   ],   { multi: true }]
5, hãy xem

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

db.members.update[   { },   [      { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } },      { $unset: [ "misc1", "misc2" ] }   ],   { multi: true }]
7

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" ] }
2

Ghi 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 xem

Mớ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

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

Đố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 }]
3

kế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

    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

  • 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ợp

Xem 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

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 }]
3

  • 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õ

    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

  • 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

    • db.people.update[   { name: "Andy" },   { $inc: { score: 1 } },   {     upsert: true,     multi: true   }]
      2, hoặc

    • 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ợp

Xem 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ập

Trong 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
{ : ,  ...,  :  }
16

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   }]];

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]

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 xem

Cá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ới

Upsert 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úc

db.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ập

Vớ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 sau

  • và 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 sau

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"] }] ]

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 đầu

Sâ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
    { "_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 và đặt trong dấu ngoặc kép

Giai đoạn thứ haiGiai đoạn loại bỏ các trường
{ : ,  ...,  :  }
51 và
{ : ,  ...,  :  }
52

Sau 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 sau

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"] }] ]

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ật

Giai đoạn đầu

Sâ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
    { "_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 và đặt trong dấu ngoặc kép

Giai đoạn thứ haiGiai đoạn tính toán một trường mới
{ : ,  ...,  :  }
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
{ : ,  ...,  :  }
93

Sau lệnh, bộ sưu tập chứa các tài liệu sau

{ : ,  ...,  :  }
0

Mẹ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

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

{ : ,  ...,  :  }
1

Tuy 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

{ : ,  ...,  :  }
2

db.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ợp

Cậ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

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

{ : ,  ...,  :  }
4

Sau khi hoạt động, bộ sưu tập chứa các tài liệu sau

{ : ,  ...,  :  }
5

Cậ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

{ : ,  ...,  :  }
7

Sau khi hoạt động, bộ sưu tập có các tài liệu sau

{ : ,  ...,  :  }
8

Chỉ đị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

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

{ : ,  ...,  :  }
9

Tạo các chỉ mục sau trên bộ sưu tập

{ _id: , : null } // _id of the document missing shard key
0

Thao 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
20

Ghi 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
1

Lệ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
3

Khô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

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
4

Ví 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
5

Ghi đè 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
6

Chỉ đị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
7

Khi 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, xem

Nế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
8

Hoạ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
9

Hoạ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   }]];
0

Sau 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   }]];
1

Viế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

Chủ Đề