我有一个节点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??
});
}
Run Code Online (Sandbox Code Playgroud)
这里USER是一个mongoose数据模型,find是查询mongodb.如果没有错误,回调提供一个用户数组.用户数据模型看起来像
{"name":"mike", "age":15, "job":"engineer"}.
因此,回调被调用并在用户中传递,我得到第一个用户并尝试从用户删除"名称".有线部分是我可以正确访问值并修改值.但是如果我'删除user.name',则不会从json对象用户中删除此元素.这是为什么?
正如其他人所说,这是由于猫鼬不是给你一个简单的对象,但一些事情一样丰富save和modifiedPaths.
如果您以后不打算保存用户对象,您还可以要求精简文档(普通js对象,没有猫鼬东西):
User.findOne({})
.lean()
.exec(function(err, user) {
delete user.name; // works
});
Run Code Online (Sandbox Code Playgroud)
或者,如果您只想获取用户并在没有某些属性的情况下向前付款,您也可以使用select,甚至可以将其与lean以下内容结合使用:
User.findOne({})
.lean()
.select('email firstname')
.exec(function(err, user) {
console.log(user.name); // undefined
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1757 次 |
| 最近记录: |