这是数组结构
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
,而不是 phone 数组中的零索引元素。尝试使用 pull
也没有成功。
如何删除mongodb中的数组元素?
尝试以下查询:
collection.update(
{ _id: id },
{ $pull: { 'contact.phone': { number: '+1786543589455' } } }
);
它将找到具有给定 _id
的文档,并从其 contact.phone
数组中删除电话 +1786543589455
。
您可以使用 $unset
取消设置数组中的值(将其设置为 null
),但不能完全删除它。
下面的代码将从数组中删除完整的对象元素,其中电话号码是“+1786543589455”
db.collection.update(
{ _id: id },
{ $pull: { 'contact': { number: '+1786543589455' } } }
);
在 Mongoose 中:来自 document:
要从子文档数组中删除文档,我们可以传递一个具有匹配 _id 的对象。
contact.phone.pull({ _id: itemId }) // remove
contact.phone.pull(itemId); // this also works
有关正确答案,请参阅 Leonid Beschastny 的答案。
您可以简单地使用 $pull 删除子文档。 $pull 运算符从现有数组中删除与指定条件匹配的一个或多个值的所有实例。
Collection.update({
_id: parentDocumentId
}, {
$pull: {
subDocument: {
_id: SubDocumentId
}
}
});
这将根据给定的 ID 找到您的父文档,然后从子文档中删除与给定条件匹配的元素。
阅读有关拉动 here 的更多信息。
要删除所有数组元素而不考虑任何给定的 id,请使用以下命令:
collection.update(
{ },
{ $pull: { 'contact.phone': { number: '+1786543589455' } } }
);
鉴于配置文件集合中的以下文档:
{ _id: 1, 票数: [ 3, 5, 6, 7, 7, 8 ] }
以下操作将从投票数组中删除所有大于或等于 ($gte) 6 的项目:
db.profiles.update( { _id: 1 }, { $pull: { votes: { $gte: 6 } } } )
更新操作后,文档只有小于 6 的值:
{ _id: 1, 票数: [ 3, 5 ] }
如果您的多个项目具有相同的值,则应使用 $pullAll 而不是 $pull。
在具有多个联系电话的问题中,使用相同的方法:
collection.update( { _id: id }, { $pullAll: { 'contact.phone': { number: '+1786543589455' } } } );它将删除与该数字匹配的所有项目。在联系电话中
尝试阅读手册。
不定期副业成功案例分享
{ $pull: { 'contact.phone.$': { 'contact.phone.$.number': '+1786543589455' } } }
和{ $pull: { 'contact.phone': { 'contact.phone.$.number': '+1786543589455' } } }
没有成功。不了解位置操作员在这里的工作吗?.update()
更新单个文档。要更新多个文档,请使用{ multi: true }
选项。请参阅db.collection.update
docs for details。