Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何删除mongodb中的数组元素?_Mongodb - Fatal编程技术网

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

如何删除mongodb中的数组元素?,mongodb,Mongodb,这里是数组结构 contact: { phone: [ { number: "+1786543589455", place: "New Jersey", createdAt: "" } { number: "+1986543589455", place: "Houston", createdAt:

这里是数组结构

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

    ]
}
这里我只知道mongo id(
\u id
)和电话号码(
+1786543589455
),我需要从文档中删除整个相应的数组元素。i、 电话数组中的e zero索引元素与电话号码匹配,需要删除相应的数组元素

contact: {
    phone: [
        {
            number: "+1986543589455",
            place: "Houston",
            createdAt: ""
        }
    ]
}
我尝试了以下更新方法

collection.update(
    { _id: id, 'contact.phone': '+1786543589455' },
    { $unset: { 'contact.phone.$.number': '+1786543589455'} }
);
但它从内部数组对象中删除
编号:+1786543589455
,而不是从电话数组中删除零索引元素。尝试使用
也没有成功


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

请尝试以下查询:

collection.update(
  { _id: id },
  { $pull: { 'contact.phone': { number: '+1786543589455' } } }
);
它将查找具有给定
\u id的文档
,并从其
联系人.phone
数组中删除手机
+1786543589455


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

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

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

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

Collection.update({
    _id: parentDocumentId
  }, {
    $pull: {
      subDocument: {
        _id: SubDocumentId
      }
    }
  });
这将根据给定的ID查找父文档,然后从子文档中删除与给定条件匹配的元素

阅读猫鼬中有关拉动的更多信息。

: 从:

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


有关正确答案,请参阅Leonid Beschastny的答案。

如果您使用Mongoose API并希望拉取子/子对象,请阅读以下内容
编辑完成后,不要忘记使用save(),否则更改将不会保存到数据库中。

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

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

非常感谢。很好用。我尝试了
{$pull:{'contact.phone.$':{'contact.phone.$.number':'+1786543589455'}}}
{$pull:{'contact.phone':{'contact.phone.$.number':'+1786543589455'}
但没有成功。不理解位置运算符在这里的作用?是否有回调?@iLoveUnicorns您可以添加回调作为第三个参数,或者可以使用返回的承诺。@LeonidBeschastny我试过了。在我的例子中,我有多个具有相同密钥的文档。我想$pull所有这些文档,但当前查询只更改1个文档,然后停止。我需要什么变化?@ShubhamA。默认情况下,
.update()
更新单个文档。要更新多个文档,请使用
{multi:true}
选项。看见
collection.update(
  { },
  { $pull: { 'contact.phone': { number: '+1786543589455' } } }
);