mongodb $pull 为什么不能删除
发布于 8 年前 作者 GaryChangCN 4684 次浏览 来自 问答

数据是这样的

{
    "_id" : ObjectId("581472c3c65f3a1b3412f147"),
    "name" : "这是一级目录-----1",
    "englishName" : "zzzzz",
    "stage" : "first",
    "children" : [ 
        ObjectId("581472f1c65f3a1b3412f149"), 
        ObjectId("581472f4c65f3a1b3412f14a")
    ],
    "type" : "group",
    "order" : 50,
    "__v" : 0
}

我想删除children 的第二项,所以使用

                var _id = req.fields._id; //581472f4c65f3a1b3412f14a
                var parent_id = req.fields.parent; //581472c3c65f3a1b3412f147
                var tmp = [];
                db.Group.update({ children: parent_id }, { $pull:{children:_id} },function(err,result){
                    console.log(result);
                    cb(err,result);
                })

但是没用的,把{ $pull:{children:_id} } 换成 { $pull:{children:ObjectId(_id)} } 提示Object不是一个函数。

3 回复

如果你用mongoose,可以这样把_id转换成ObjectId

_id = mongoose.Types.ObjectId(_id)

自己解决方式是储存_id再数组时候把其转为字符串即可

在实际项目中类似于这样的,我不确定我要删除那个,只能是根据条件来删除,那我的处理是:

var a = [];
children.forEach(t => {
  if(t (满足继续留下来的条件) ){
    a.push(t);
  }
})
.update({_id: mongoose.ObjectId(_id)},{children: a})
回到顶部