Tôi có một tài liệu trông như thế này:
{
"_id": 3,
"Slug": "slug",
"Title": "title",
"Authors": [
{
"Slug": "slug",
"Name": "name"
}
]
}
Tôi muốn cập nhật tất cả các tác giả.Name dựa trên tác giả.Slug. Tôi đã thử điều này nhưng nó không hoạt động:
.update[{"Authors.Slug":"slug"}, {$set: {"Authors.Name":"zzz"}}];
Tôi làm gì sai ở đây?
Để cập nhật các tài liệu tốt nhất trong MongDB, hãy sử dụng nhà điều hành Update [] và vị trí [$]. Hãy để chúng tôi tạo một bộ sưu tập với các tài liệu -$] operator. Let us create a collection with documents −
> db.demo643.insertOne[{ ... details : [ ... { ... "CountryName":"US", ... StudentDetails:[{Name:"Chris"},{SubjectName:"MySQL"}] ... }, ... ... { ... "CountryName":"UK", ... StudentDetails:[{Name:"Bob"},{SubjectName:"Java"}] ... } ... ] ... } ... ] { "acknowledged" : true, "insertedId" : ObjectId["5e9c737f6c954c74be91e6e3"] }
Hiển thị tất cả các tài liệu từ một bộ sưu tập với phương thức trợ giúp của find [] -
> db.demo643.find[];
Điều này sẽ tạo ra đầu ra sau -
{ "_id" : ObjectId["5e9c737f6c954c74be91e6e3"], "details" : [ { "CountryName" : "US", "StudentDetails" : [ { "Name" : "Chris" }, { "SubjectName" : "MySQL" } ] }, { "CountryName" : "UK", "StudentDetails" : [ { "Name" : "Bob" }, { "SubjectName" : "Java" } ] } ] }
Sau đây là truy vấn để cập nhật các tài liệu nhúng lồng nhau trong MongoDB -
> db.demo643.update[{"details.CountryName": "UK"}, {"$push": {"details.$.StudentDetails": {Marks:78}}}] WriteResult[{ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }]
Hiển thị tất cả các tài liệu từ một bộ sưu tập với phương thức trợ giúp của find [] -
> db.demo643.find[].pretty[];
Điều này sẽ tạo ra đầu ra sau -
{ "_id" : ObjectId["5e9c737f6c954c74be91e6e3"], "details" : [ { "CountryName" : "US", "StudentDetails" : [ { "Name" : "Chris" }, { "SubjectName" : "MySQL" } ] }, { "CountryName" : "UK", "StudentDetails" : [ { "Name" : "Bob" }, { "SubjectName" : "Java" }, { "Marks" : 78 } ] } ] }
Sau đây là truy vấn để cập nhật các tài liệu nhúng lồng nhau trong MongoDB -
- Cập nhật vào ngày 12 tháng 5 năm 2020 08:31:10
- Câu hỏi và câu trả lời liên quan
- Cập nhật các đối tượng trong một mảng tài liệu MongoDB [cập nhật lồng nhau]?
- MongoDB - tài liệu nhúng truy vấn?
- Cập nhật tài liệu lồng nhau trong MongoDB
- Kiểm tra các tài liệu hiện có/tài liệu nhúng trong MongoDB
- Tổng hợp trong MongoDB cho các tài liệu lồng nhau?
- Truy vấn mảng các tài liệu nhúng trong MongoDB dựa trên phạm vi?
- Làm thế nào tôi có thể tổng hợp các tài liệu lồng nhau trong MongoDB?
- Nối thêm một mục trong một vào nhiều tài liệu nhúng với MongoDB
- Truy vấn một loạt các tài liệu nhúng trong MongoDB và đẩy người khác?
- Tìm trong tài liệu MongoDB với mảng lồng đầy và định hình lại kết quả tài liệu
- Cập nhật dữ liệu trong MongoDB
- Nhận tất cả các tài liệu nhúng với tình trạng của ismarried trong bộ sưu tập MongoDB
- Làm thế nào để chỉ hiển thị các khóa từ các tài liệu MongoDB lồng nhau?
- Truy vấn MongoDB chỉ nhận được các trường cụ thể trong các tài liệu mảng lồng nhau?
Thí dụ
Đối với lược đồ sau:
{name: 'Tom', age: 28, marks: [50, 60, 70]}
Cập nhật điểm của Tom lên 55 trong đó các nhãn hiệu là 50 [sử dụng toán tử vị trí $]:
db.people.update[{name: "Tom", marks: 50}, {"$set": {"marks.$": 55}}]
Đối với lược đồ sau:
.update[{"Authors.Slug":"slug"}, {$set: {"Authors.Name":"zzz"}}];
0Cập nhật điểm của Tom lên 55 trong đó các nhãn hiệu là 50 [sử dụng toán tử vị trí $]:
.update[{"Authors.Slug":"slug"}, {$set: {"Authors.Name":"zzz"}}];
1Cập nhật nhãn hiệu tiếng Anh của Tom lên 85:
Giải thích ở trên ví dụ:
Cập nhật các giá trị trong một mảng
Toán tử $ định vị xác định một phần tử trong một mảng để cập nhật mà không chỉ định rõ ràng vị trí của phần tử trong mảng.
Hãy xem xét một sinh viên bộ sưu tập với các tài liệu sau:
.update[{"Authors.Slug":"slug"}, {$set: {"Authors.Name":"zzz"}}];
2Để cập nhật 80 đến 82 trong mảng điểm trong tài liệu đầu tiên, hãy sử dụng toán tử $ định vị nếu bạn không biết vị trí của phần tử trong mảng:
.update[{"Authors.Slug":"slug"}, {$set: {"Authors.Name":"zzz"}}];
3