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

xurqigkl  于 2023-05-17  发布在  Go
关注(0)|答案(6)|浏览(345)

这里是数组结构

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

    ]
}

这里我只知道mongo的id(_id)和电话号码(+1786543589455),我需要从document中删除整个对应的数组元素。即电话数组中的零索引元素与电话号码相匹配,并且需要移除相应的数组元素。

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

我尝试了以下更新方法

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

但是它从内部数组对象中删除了number: +1786543589455,而不是电话数组中的零索引元素。用pull也试过,没有成功。
如何在mongodb中删除数组元素?

ecr0jaav

ecr0jaav1#

给定配置文件集合中的以下文档:

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

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

db.profiles.update( { _id: 1 }, { $pull: { votes: { $gte: 6 } } } )

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

{ 
   _id: 1, 
   votes: [  3,  5 ] 
}

如果你有多个项目具有相同的值,你应该使用$pullAll而不是$pull。
在问题中有多个联系号码相同使用此:

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

它将删除与联系电话中的该号码匹配的每个项目。
试着阅读手册。

cdmah0mi

cdmah0mi2#

请尝试以下查询:

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

它将查找具有给定_id的文档,并从其contact.phone数组中删除电话+1786543589455
您可以使用$unset取消设置数组中的值(将其设置为null),但不能完全删除它。

gwo2fgha

gwo2fgha3#

您可以简单地使用$pull来删除子文档。$pull运算符从现有数组中删除与指定条件匹配的一个或多个值的所有示例。

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

这将根据给定的ID查找您的父文档,然后从子文档中删除与给定条件匹配的元素。
阅读更多关于拉这里.

xmakbtuz

xmakbtuz4#

在 Mongoose 中:从文件:
要从子文档数组中删除一个文档,我们可以传递一个带有matching _id的对象。

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

**请参阅Leonid Beschastny的答案,以获得正确答案。

iklwldmw

iklwldmw5#

要删除所有数组元素,而不管任何给定的id,使用这个:

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

7kjnsjlb6#

要从特定文档中删除所有匹配的数组元素,请执行以下操作:

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

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

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

相关问题