2013-06-06 50 views
80

這裏是陣列結構如何刪除mongodb中的數組元素?

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

    ] 
} 

在這裏,我只知道蒙戈ID(_id)和電話號碼(+1786543589455),我需要從文檔移除整個相應數組元素。即電話數組中的零索引元素與電話號碼匹配,需要刪除相應的數組元素。

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

我試圖與以下更新方法

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

但它從內陣列對象中刪除number: +1786543589455,不是零索引的元素在電話陣列。試用pull也沒有成功。

如何刪除mongodb中的數組元素?

回答

144

嘗試以下查詢:

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

它會找到與給定_id文件,並從其contact.phone陣列刪除手機+1786543589455

您可以使用$unset取消設置數組中的值(將其設置爲null),但不能將其完全刪除。

+2

謝謝取出完整對象元素。它工作很好。我嘗試用'{$ pull:{'contact.phone。$':{'contact.phone。$。number':'+1786543589455'}}}'和'{$ pull:{'contact.phone':{ 'contact.phone。$。number':'+1786543589455'}}}'沒有成功。不瞭解位置操作員的工作嗎? –

+1

有回電嗎? –

+1

@iLoveUnicorns您可以添加回調作爲第三個參數,或者您可以使用返回的承諾。 –

6

這下面的代碼將從陣列,其中的電話號碼爲「1786543589455」

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