2013-06-06 62 views
80

Đây là mảng cấu trúcLàm thế nào để loại bỏ phần tử mảng trong mongodb?

contact: { 
    phone: [ 
     { 
      number: "+1786543589455", 
      place: "New Jersey", 
      createdAt: "" 
     } 
     { 
      number: "+1986543589455", 
      place: "Houston", 
      createdAt: "" 
     } 

    ] 
} 

Ở đây tôi chỉ biết id Mongo (_id) và số điện thoại (+1786543589455) và tôi cần phải loại bỏ toàn bộ phần tử mảng tương ứng từ tài liệu. tức là phần tử không được lập chỉ mục trong mảng điện thoại được khớp với số điện thoại và cần phải loại bỏ phần tử mảng tương ứng.

contact: { 
    phone: [ 
     { 
      number: "+1986543589455", 
      place: "Houston", 
      createdAt: "" 
     } 
    ] 
} 

tôi đã cố gắng với theo phương pháp cập nhật

collection.update(
    { _id: id, 'contact.phone': '+1786543589455' }, 
    { $unset: { 'contact.phone.$.number': '+1786543589455'} } 
); 

Nhưng nó loại bỏ number: +1786543589455 từ đối tượng mảng bên trong, không phải không yếu tố được lập chỉ mục trong mảng điện thoại. Đã thử với pull cũng không thành công.

Làm thế nào để loại bỏ phần tử mảng trong Mongodb?

Trả lời

144

Hãy thử truy vấn sau đây:

collection.update(
    { _id: id }, 
    { $pull: { 'contact.phone': { number: '+1786543589455' } } } 
); 

Nó sẽ tìm tài liệu với _id nhất định và loại bỏ các điện thoại +1786543589455 từ mảng contact.phone của nó.

Bạn có thể sử dụng $unset để bỏ đặt giá trị trong mảng (đặt thành null), nhưng không xóa hoàn toàn.

+2

Cảm ơn bạn. Nó hoạt động tốt đẹp. Tôi đã thử với '{$ pull: {'contact.phone. $': {'Contact.phone. $. Number': '+1786543589455'}}}' và '{$ pull: {'contact.phone': { 'contact.phone. $. number': '+1786543589455'}}} 'không thành công. Không hiểu hoạt động của các nhà điều hành vị trí ở đây? –

+1

Có cuộc gọi lại với điều này không? –

+1

@iLoveUnicorns bạn có thể thêm gọi lại làm đối số thứ ba hoặc bạn có thể sử dụng lời hứa trả lại. –

6

mã bên dưới này sẽ loại bỏ các yếu tố đối tượng hoàn chỉnh từ các mảng, nơi mà các số điện thoại là '1786543589455'

db.collection.update(
    { _id: id }, 
    { $pull: { 'contact': { number: '+1786543589455' } } } 
); 
Các vấn đề liên quan