2013-08-08 18 views
11

Nếu tôi có một mảng lồng nhau trong lược đồ của mình, làm cách nào để cho MongoDB xóa các mục nhập của nó cho một mô hình cụ thể?MongoDB - Xóa các mục trong một mảng lồng nhau

Schema

var UserSchema = new Schema({ 
    username: String, 
    documents: [Number] 
}); 

tôi đã cố gắng một cái gì đó như thế này:

db.users.update({"username": "tom"}, {"$pullAll": {"documents": []}}) 

Nhưng các mục trong mảng lồng nhau vẫn còn ở đó.

Trả lời

22

Mã của bạn không hoạt động, vì $ pullAll yêu cầu danh sách các mục cần xóa khỏi mảng. Bạn đang đi qua mảng trống, do đó không có gì được loại bỏ.

Bạn chỉ có thể thiết lập các tài liệu để mảng trống thay vì loại bỏ tất cả các mục:

db.users.update({"username": "tom"}, {"$set": {"documents": []}}) 

Nếu bạn muốn tránh tạo ra các tài liệu mảng nếu "tom" không có nó, sau đó kiểm tra xem mảng tồn tại khi lựa chọn tài liệu để cập nhật:

db.users.update({username: "tom", documents: {$exists: true}}, 
       {$set: {documents: []}}) 

uPDATE: Một tùy chọn khác để loại bỏ tất cả các mục mảng là sử dụng $ kéo với truy vấn mà đáp ứng tất cả các tài liệu:

db.users.update({username: "tom"}, {$pull: {documents: {$exists: true}}})