我想从存储在mongodb文档中的数组中删除特定元素。 我正在使用这个:
model.registerCompany.findOneAndUpdate({companyKey:"a key"},
{$pop:{onlineEmployees:"John"}},
function(err,doc){
if(!err)
console.log("Online list modified: ",doc);
else
console.log("Online list modified error :",err);
});
但我不确定$ pop是否从数组中删除了特定元素“John”(onlineEmployees),或者只是从中弹出最后一个元素。
我是做得对还是有另一种方法可以做到。
我想我得到了答案.. $ pull用于此目的,如链接中所述:
http://docs.mongodb.org/manual/reference/operator/pull/#_S_pull
答案 0 :(得分:9)
$pop运算符将删除数组的第一个或最后一个元素,这可能不一定是正确的元素。
如果您想要特定元素,可以$pull具有已定义条件的项目:
model.registerCompany.findOneAndUpdate({companyKey:"a key"},
{$pull:{onlineEmployees:"John"}},
您必须确保数组中的值是唯一的,因为$pull
会删除与名称“John”匹配的所有元素。
如果数组中存在相同的值,则需要使用$unset
和$
位置运算符将目标元素值设置为null
(遗憾的是,$ unset不会删除元素)然后使用$pull
删除具有null
值的元素。为此,您必须确保有效值不能为null
。在这种情况下,代码可以是:
model.registerCompany.findOneAndUpdate({companyKey:"a key", onlineEmployees:"John"},{ $unset: { "onlineEmployees.$" : '' } } )
model.registerCompany.findOneAndUpdate({companyKey:"a key"},{ $pull: { "onlineEmployees" : null } } )