Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.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
Perl 如何基于内容删除数组中的元素?_Perl_Mongodb - Fatal编程技术网

Perl 如何基于内容删除数组中的元素?

Perl 如何基于内容删除数组中的元素?,perl,mongodb,Perl,Mongodb,我正在使用MongoDB和Perl。以下是我的数据结构: { "_id" : ObjectId("501976f8005c8b541d000000"), "err_id" : "err", "solution" : [ { "attachment" : "attach", "macr" : "macrs", "yammer" : "yam", "resoluti

我正在使用MongoDB和Perl。以下是我的数据结构:

{
    "_id" : ObjectId("501976f8005c8b541d000000"),
    "err_id" : "err",
    "solution" : [
        {
            "attachment" : "attach",
            "macr" : "macrs",
            "yammer" : "yam",
            "resolution" : "l",
            "salesforce" : "salesforce",
            "username" : "bob"
        },
        {
            "attachment" : "attach",
            "macr" : "macrs",
            "yammer" : "yam",
            "resolution" : "losssss",
            "salesforce" : "salesforce",
            "username" : "bob"
        }
    ]
}
如你所见,我有一个数组,里面有对象。我使用Perl MongoDB库创建了它

我熟悉Perl MongoDB库中操纵数组的一些语法。例如,我使用它查找用户名与
$username
相同的条目

$users->find({"solution.username" => $username});
我认为删除元素很简单:

$users->remove({"solution.username" => $username});
但遗憾的是,情况并非如此。我已经尝试过这个,并使用拉,但没有任何效果!我很难找到这个。有人知道根据数组元素某个字段的内容删除该元素的语法吗?

MongoDB::Collection方法将删除与查询匹配的文档。。所以肯定不是你想要的

要删除特定字段,应使用

您的solution.username实际上位于一个数组中,因此您必须为要删除的字段包含一个数组索引,例如:

$users->update({"_id" => '123'}, {
   '$unset' => {
       'solution.0.username' => 1,
       'solution.1.username' => 1
   }
});
我不知道在
解决方案
数组中取消设置与
用户名
匹配的所有字段的较短语法,但您可以将多个
解决方案。#.username
字段添加到
$unset
命令中


上面的示例从数组中删除前两个用户名条目。如果匹配的文档有两个以上的用户名条目,每次运行此更新时,您最多会删除两个以上的条目(如果存在)。

就像find()返回整个文档一样,remove()会删除整个文档..马上-实际上我想删除整个文档!但它似乎并没有移除任何东西。我的示例语法正确吗?我不熟悉Perl语法,但我检查了文档。看起来没问题。如果find()确实返回了一些文档,那么remove()应该理想地删除所有这些文档,因为您的查询与示例中提到的完全相同。相关问题:,您是否尝试过检查错误消息?您应该在运行后调用
last_error()
以确保没有问题,或者运行
$users->remove({“solution.username”=>$username},{safe=>1})出错时会发出嘎嘎声。