我正在使用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 lib中操作数组的一些语法。例如,我使用它来查找用户名与$username
相同的条目。
$users->find({"solution.username" => $username});
我认为删除元素会很简单:
$users->remove({"solution.username" => $username});
但唉,事实并非如此。我试过这个并使用拉,但无济于事!我很难找到这个。有没有人知道根据其中一个字段的内容删除数组元素的语法?
答案 0 :(得分:1)
MongoDB :: Collection remove()方法会删除您的查询所匹配的文档..所以绝对不是您想要的。
要删除特定字段,请使用$unset。
您的solution.usernames实际上是在一个数组中,因此您必须包含要删除的字段的数组索引,例如:
$users->update({"_id" => '123'}, {
'$unset' => {
'solution.0.username' => 1,
'solution.1.username' => 1
}
});
我不知道在username
数组中取消设置匹配solution
的所有字段的语法较短,但您可以在solution.#.username
命令中添加多个$unset
字段
上面的示例删除了数组中的前两个用户名条目。如果匹配的文档具有两个以上的用户名条目,则每次运行此更新时,最多可删除两个条目(如果存在)。