无法删除json元素

pyt*_*lus 1 mongoose node.js

我有一个节点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对象用户中删除此元素.这是为什么?

Zla*_*tko 6

正如其他人所说,这是由于猫鼬不是给你一个简单的对象,但一些事情一样丰富savemodifiedPaths.

如果您以后不打算保存用户对象,您还可以要求精简文档(普通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)

  • 关于替代品的详细信息。谢谢。 (2认同)