这是数组结构

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,而不是电话数组中的零索引元素。试了拉也没有成功。

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


尝试以下查询:

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

它将找到具有给定_id的文档,并从联系人中删除电话+1786543589455。电话数组。

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


您可以简单地使用$pull来删除子文档。 $pull操作符从现有数组中删除一个或多个符合指定条件的值的所有实例。

Collection.update({
    _id: parentDocumentId
  }, {
    $pull: {
      subDocument: {
        _id: SubDocumentId
      }
    }
  });

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

点击这里阅读更多关于拉力的内容。


猫鼬: 从文件中:

要从子文档数组中删除文档,可以传递一个对象 有一个匹配的_id。

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。

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

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

试着阅读说明书。


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

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

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

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