Node.js 从mongoose文档实例中删除属性

Node.js 从mongoose文档实例中删除属性,node.js,mongoose,Node.js,Mongoose,我需要从mongoose文档实例中删除一个属性。我发现了很多问题,说明了如何从数据库中删除它,但这不是我想要的 我需要向下拉文档,包括一个字段来检查安全访问,然后我想剥离该字段,以便在下游代码决定调用toObject()并将对象发送回客户端时,不会泄露该字段 有什么想法吗?我需要从文档实例中删除password属性,但在API文档中找不到任何内容。以下是我所做的: doc.set('password', null); // doc.password is null 然后我发现你也可以这样做:

我需要从mongoose文档实例中删除一个属性。我发现了很多问题,说明了如何从数据库中删除它,但这不是我想要的

我需要向下拉文档,包括一个字段来检查安全访问,然后我想剥离该字段,以便在下游代码决定调用
toObject()
并将对象发送回客户端时,不会泄露该字段


有什么想法吗?

我需要从文档实例中删除password属性,但在API文档中找不到任何内容。以下是我所做的:

doc.set('password', null); // doc.password is null
然后我发现你也可以这样做:

delete doc._doc.password // doc.password is undefined

使用值为
null
set
函数将只分配值,而不是删除值。最好首先使用
toObject()
转换文档(使其成为普通对象),进行更改并将其恢复为模型文档:

let tempDoc = doc.toObject();
delete tempDoc.password;
doc = new this(tempDoc);

从版本2.4开始,您可以执行以下操作:

doc.field = undefined;
await doc.save();

这将基本上
$unset
这个字段

我找到了
删除文档。_doc.密码
。唯一需要注意的是,这也破坏了保存文档的过程,这是我需要的功能。在我有时间找到更好的解决方案之前,我目前只是忽略这个问题。它会中断保存,因为您的架构希望属性为字符串,并且未定义。尝试更新而不是保存。删除方法无效。调用
doc.save()
时,不会从数据库中删除该字段。您需要执行-
doc.set('password',未定义)编辑:我认为这实际上是OP想要的——他希望
doc
的下游持有者不能看到
password
字段,但听起来他不想从数据库中删除该字段这用于保存新文档,但是对于更新,我怎么能这样做呢?这也适用于更新。这不适用于将_id设置为未定义。我假设因为_id是一个特殊属性,所以不,可能不起作用。我建议改为使用
toObject()
创建文档的副本并对其进行操作。如果我们想克隆一个对象,这就是我们所使用的,从它听起来像你可能试图做的事情。