mongoose查询数据库找到文档删除其_id无效
发布于 9 年前 作者 yuwanlin 7086 次预览 最后一次回复是 8 年前 来自 问答
postModel.findOne({
"name": name,
}, function(err, doc) {
if(err){
return callback(err);
}
delete doc._id; //删除掉原来的_id, 这里删除掉_id后,其doc._id仍然存在
console.log(doc.id);
// etc.****
})
如上所述,我在找到那个doc后想要删除它的_id属性,然后更新它自己。继而通过doc的一些属性得到另外一个document,然后保存。这样后面一个document就复制了doc的一些属性(通过复制)。问题是
- 使用
delete doc._id后,其依然存在,这样我得到的document的_id和doc的_id是一样的,形成了覆盖。 - 我在
new Schema({ _id: Schema.Types.ObjectId })添加了_id字段后,得到的结果是一样的。 - 如果使用mongodb来操作,这样就没有问题,得到的结果是
undefined。
我该怎么做? 有会的哥哥姐姐帮忙解答一下吗
10 回复
搞了好长时间了唉…
有人帮帮我吗
找个微信或者qq群 发个红包瞬间搞定,我觉得10块以内肯定搞得定
唉,还是得自己回答。发起了一个issue,这是回答。
大致是说,mongoose中的document不是简单的对象,他们是getter和setter。所以使用delete看起来很奇怪。使用
doc.set()代替。 删除_id后,我做了update操作,这样就出现问题了。我的解决方法:重新new一个对象
newDoc,复制doc的一些属性到newDoc.issue
@jiangzhuo 可以的。。
你是看的改版之前的那个blog么
因为查询出来的是一个MongooseDocuments对象,如果要获得普通对象的话,需要用lean()方法 lean()
查找数据的时候直接把id过滤掉
Mongoose Model有个toObject方法,可以转换成plain javascript object 的,直接查出来的,是有getter和setter的,直接赋值什么的,不会按预期生效的。你可以试试严格模式,估计会报错的
直接这样