首页 文章

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

提问于
浏览
101

这是阵列结构

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中的数组元素?

3 回答

  • 183

    请尝试以下查询:

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

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

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

  • 1

    以下代码将从数组中删除完整的对象元素,其中电话号码为“1786543589455”

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

    您只需使用$ pull删除子文档即可 . $ pull运算符从现有数组中删除与指定条件匹配的值的所有实例 .

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

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

    阅读更多关于拉here的信息 .

相关问题