无法删除json元素

时间:2015-08-05 05:26:43

标签: node.js mongoose

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

2 个答案:

答案 0 :(得分:6)

正如其他人所说,这是因为猫鼬没有给你一个简单的对象,而是富含savemodifiedPaths之类的东西。

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