如何使用nodeJS从JSON对象中删除一个项目?

5

我是使用 node v8.11,无法从创建并从 mongoDB 返回新对象的对象中删除项目。

创建后的示例响应:

{
    "name": "",
    "device": "",
    "session":"",
    "_id": "5b7e78c3cc7bca3867bbd1c9",
    "createdAt": "2018-08-23T09:05:07.134Z",
    "updatedAt": "2018-08-23T09:05:07.134Z",
    "__v": 0
}

尝试从响应中移除“_id”,如下所示:

tokens.create(req.body).then(function(session){
     delete session._id;
     return res.send(session); // _id still exist
});

我看到在ES6中delete已经被弃用了,这个问题是什么情况? 我该如何使用键名在一行内删除一个项目?


2
Mongoose 返回 bson 类型,因此您需要将其转换为纯 JavaScript 对象。然后 delete 可能会起作用! - Devang Naghera
@DevangNaghera,这就是我在答案中提到的。这正是OP所需要的。 - Ankit Agarwal
@DevangNaghera - 是的,我明白了。+1 - 151291
2个回答

6
当您使用mongoose模型创建对象时,它将返回一个模型对象而不是纯JavaScript对象。因此,当您执行delete session._id;时,它将不起作用,因为session是一个模型对象,它不允许直接更改模型对象上的属性。
您需要使用模型对象的toJSON()toObject()方法将模型对象更改为纯JS对象,并在该对象上删除属性:
tokens.create(req.body).then(function(session) {
  var sessionObj = session.toJSON();
  delete sessionObj._id;
  return res.send(sessionObj);
});

0
使用解构和剩余操作符:

var res = {
    "name": "",
    "device": "",
    "session":"",
    "_id": "5b7e78c3cc7bca3867bbd1c9",
    "createdAt": "2018-08-23T09:05:07.134Z",
    "updatedAt": "2018-08-23T09:05:07.134Z",
    "__v": 0
};

var { _id, ...ret } = res ;

console.log(ret);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接