我需要从mongoose文档实例中删除一个属性。我找到了很多关于如何从数据库中删除它的问题,但这不是我要找的。
我需要拉下文件,包括一个字段来检查安全访问,然后想剥离该字段,以免在下游代码决定调用 toObject()
并将对象发送回客户端时披露该字段。
有什么想法吗?
我需要从文档实例中删除密码属性,但在API文档中没有找到任何相关内容。这是我所做的:
doc.set('password', null); // doc.password is null
然后我发现您也可以这样做:
delete doc._doc.password // doc.password is undefined
从版本2.4开始,您可以执行以下操作:
doc.field = undefined;
await doc.save();
这将从本质上来说$unset
该字段
toObject()
创建文档的副本并对其进行操作。如果我们想要克隆一个对象,这就是我们使用的方法,从你的描述中听起来你可能正在尝试这样做。 - Adam Reisnull
的set
函数将简单地分配该值,而不是移除它。最好先使用toObject()
将文档转换为普通对象,进行更改,然后将其恢复为模型文档。let tempDoc = doc.toObject();
delete tempDoc.password;
doc = new this(tempDoc);
delete doc._doc.password
。唯一的问题是这会破坏保存文档的功能,而这是我需要的功能。目前我只是忽略它,等有时间再找更好的解决方案。 - joshperrydoc.save()
时,它不会从数据库中删除该字段。您需要执行-doc.set('password', undefined);
编辑:我认为这实际上是OP想要的 - 他希望doc
的下游持有者无法看到password
字段,但似乎并不希望该字段实际上从数据库中被删除。 - Kip