如何删除mongodb中的数组元素?

这是数组结构

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


]
}

这里我只知道mongo 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中的数组元素?

200925 次浏览

尝试以下查询:

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

它将找到带有给定_id的文档,并从其contact.phone数组中删除电话+1786543589455

你可以使用$unset来取消数组中的值(将其设置为null),但不能完全删除它。

下面的代码将从数组中删除完整的object元素,其中电话号码为'+1786543589455'

db.collection.update(
{ _id: id },
{ $pull: { 'contact': { number: '+1786543589455' } } }
);
你可以简单地使用$pull来删除子文档。 $pull操作符从现有数组中删除一个或多个值的所有实例,这些值符合指定的条件
Collection.update({
_id: parentDocumentId
}, {
$pull: {
subDocument: {
_id: SubDocumentId
}
}
});

这将根据给定的ID找到父文档,然后从subDocument中删除与给定条件匹配的元素。

阅读更多关于pull 在这里

猫鼬< p >: 从文档:

要从子文档数组中删除一个文档,可以传递一个对象

contact.phone.pull({ _id: itemId }) // remove
contact.phone.pull(itemId); // this also works

正确答案见Leonid Beschastny的回答。

要删除所有数组元素,而不考虑任何给定的id,使用以下命令:

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

给定profiles集合中的以下文档:

{_id: 1,投票:[3,5,6,7,7,8]}

以下操作将从votes数组中删除所有大于或等于($gte) 6的项:

db.profiles。更新({_id: 1}、{$拉:{选票:{$ gte: 6}}})

在更新操作之后,文档的值只小于6:

{_id: 1,投票:[3,5]}

如果你有多个相同值的项,你应该使用$pullAll而不是$pull。

在有多个联系电话的问题中,同样使用这个:

< p > collection.update ( {_id: id}, {$pullAll:{'联系人。电话':{号码:'+1786543589455'}}} ); 它将删除与该数字匹配的每一项。在联系电话

试着阅读说明书。

删除指定文档中所有匹配的数组元素:

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

所有文档中删除所有匹配的数组元素:

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