我有一个节点js函数:
function func() {
USER.find({},function(err, users){
user = users[0];
console.log(user); // {"name":"mike", "age":15, "job":"engineer"}
user.name = "bob"; //{"name":"bob", "age":15, "job":"engineer"}
delete user.name;
console.log(user); // {"name":"mike", "age":15, "job":"engineer"} name still there??
});
}
这里USER是一个猫鼬数据模型,find是查询mongodb。如果没有错误,回调提供一个用户数组。用户数据模型类似于
{"name":"mike", "age":15, "job":"engineer"}
。
因此回调被调用并传递给用户,我得到第一个用户并试图删除"名称"来自用户。有线部分是我可以正确访问值并修改值。但是如果我删除了user.name',则不会从json对象用户中删除此元素。那是为什么?
答案 0 :(得分:6)
正如其他人所说,这是因为猫鼬没有给你一个简单的对象,而是富含save
和modifiedPaths
之类的东西。
如果您以后不打算保存用户对象,您还可以要求精简文档(普通js对象,没有猫鼬东西):
User.findOne({})
.lean()
.exec(function(err, user) {
delete user.name; // works
});
或者,如果您只想获取用户并在没有某些属性的情况下向前付款,您也可以使用select
,甚至可以将其与lean
结合使用:
User.findOne({})
.lean()
.select('email firstname')
.exec(function(err, user) {
console.log(user.name); // undefined
});
答案 1 :(得分:4)
不是最佳解决方法,但是......您是否尝试过设置为undefined
?
user.name = undefined;