2010-09-30 40 views
24

Trong MongoDB, làm cách nào để bạn sử dụng $set để cập nhật giá trị lồng nhau?

Ví dụ, hãy xem xét một bộ sưu tập người với tài liệu sau:

{ 
    _id: ObjectId("5a7e395e20a31e44e0e7e284"), 
    name: "foo", 
    address: { street: "123", town: "bar" } 
} 

Làm thế nào để cập nhật các street lĩnh vực nhúng trong tài liệu address"123"-"Main Street"?

Trả lời

42

Sử dụng dot notation:

db.people.update({ }, { $set: { "address.street": "Main Street" } }) 
+3

Tính năng này có hoạt động ngay cả khi địa chỉ không tồn tại không? Tôi biết $ set sẽ tạo ra đường phố nếu nó không tồn tại trên địa chỉ nhưng hành vi là gì nếu các thuộc tính của tổ tiên không tồn tại? Ngoài ra, liên kết của bạn yêu cầu đăng nhập. – Tom

+2

@Tom, cảm ơn những người đứng đầu về liên kết, tôi đã sửa nó. Để trả lời câu hỏi của bạn: nó sẽ tạo ra các thuộc tính tổ tiên cần thiết cho bạn nếu chúng không tồn tại. –

+0

@Tom Có nó sẽ. Nó sẽ tạo toàn bộ đối tượng xuống trường bạn đang thiết lập. (Trả lời muộn, nhưng hy vọng điều này hữu ích cho những người khác ngại về câu hỏi này) – Nepoxx

1

Ngoài Niels' câu trả lời, cũng không xác minh "loại" giá trị lồng nhau. Trong trường hợp của tôi, đó là một "chuỗi" được hình thành từ json. Mặc dù điều này có thể không xảy ra, nhưng đảm bảo rằng giá trị có loại phù hợp.

Các vấn đề liên quan