猫鼬从对象中删除属性

Posted

技术标签:

【中文标题】猫鼬从对象中删除属性【英文标题】:mongoose removing properties from object 【发布时间】:2017-10-23 00:32:03 【问题描述】:

寻找一种在将对象属性发送到前端之前删除它们的方法。 这有什么原因吗:

var obj = 
    name: 'cris',
    age: 22,

console.log(obj) //output name, age
delete obj.name
console.log(obj) //output age

这不是:

User.findOne( username: req.query.username , function (err, user) 
    if (user != null) 
        console.log(user) //output all props
        delete user.salt || delete user['salt']
        console.log(user) //output all props
     
);

【问题讨论】:

【参考方案1】:

要使用 delete,您需要通过调用 toObject 将模型文档转换为纯 javascript 对象:

User.findOne( username: req.query.username , function (err, user) 
    if (user != null) 
        console.log(user) //output all props
        user = user.toObject();
        delete user.salt || delete user['salt']
        console.log(user) //remove salt prop
     
);

你也可以修改使用这个

User.findOne(, function(err, user)
  user.key_to_delete = undefined;
  user.save();
);

【讨论】:

如果您将属性设置为undefined,然后调用save(),它是否只保存单个检索到的实例的更改? (即,不是数据库中的实际文档记录?) EDIT 我确实尝试过这个,它只影响检索到的实例(非常酷)。对我来说唯一需要的是我的密码盐字段,所以当我调用.save() 时,它会标记一个验证错误(但仍会返回我的 json 数据,所以我猜这一切都很好)......我想知道最佳实践是什么......似乎在它被钩住后转换它toObject() 最好把它从猫鼬身上拿出来,但很好奇其他人的想法..【参考方案2】:

db.collection.findOne() 方法返回一个光标。您需要使用 toObject() 转换为对象。使用 user.toObject() 然后删除并将其发送给客户端。

【讨论】:

【参考方案3】:

Mongoose 正在返回一个模型实例,而不是您正在寻找的普通 JS 对象。您正在查找的数据可以通过user.toObject() 访问。

【讨论】:

【参考方案4】:

user 是 Mongoose 文档,而不是常规对象。

您可以使用toObject() 将其转换为一个:

user = user.toObject();

【讨论】:

以上是关于猫鼬从对象中删除属性的主要内容,如果未能解决你的问题,请参考以下文章

猫鼬从其他收藏中找到价值

无法“删除”猫鼬文档中对象的属性[重复]

MongoDB 更新对象并删除属性?

MongoDB 更新对象并删除属性?

如何在猫鼬中动态地将值推入对象的属性?

(猫鼬)如何在用户集合中搜索会话数组属性内的对象内的令牌