【问题标题】:Cannot delete json element无法删除 json 元素
【发布时间】:2015-10-27 17:31:23
【问题描述】:

我有一个节点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是mongoose数据模型,find是查询mongodb。如果没有错误,回调会提供一个用户数组。用户数据模型看起来像

{"name":"mike", "age":15, "job":"engineer"}

所以回调被调用并传入用户,我得到第一个用户并试图从用户中删除“名称”。有线部分是我可以正确访问该值并修改该值。但是,如果我“删除 user.name”,则不会从 json 对象用户中删除该元素。这是为什么呢?

【问题讨论】:

  • 也做console.log(delete user.name),它应该返回true,否则,它不能以某种方式被删除

标签: node.js mongoose


【解决方案1】:

不是最好的解决方法,但是...您是否尝试过设置为 undefined

user.name = undefined;

【讨论】:

【解决方案2】:

正如其他人所说,这是因为猫鼬没有给你一个简单的对象,而是一些丰富的东西,比如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
});

【讨论】:

  • 关于替代品的详细信息。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-07
  • 2014-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
相关资源
最近更新 更多