【问题标题】:Omit or pick specific properties on save() with mongoose使用猫鼬省略或选择 save() 上的特定属性
【发布时间】:2021-05-08 18:37:24
【问题描述】:

所以,我save() mongoose 中的一个文档并使用保存的文档将响应发送回客户端,但是假设我想选择或省略我发送给客户端的数据的某些属性,我应该怎么做这以正确的方式

// blablabla
someDoc = await page.save()
res.send(someDoc)

现在,我不能像这样简单地 delete someDoc 的属性:

someDoc = await page.save()
delete someDoc.propName
res.send(someDoc)

但如果我深拷贝someDoc 并对其进行操作,我可以(dah)。

如果我愿意,我也不能在这里使用 lodash,它根本不起作用:

someDoc = await page.save()
_.pick(someDoc , ["propName"]);
res.send(someDoc)

所以,首先我真的不明白,为什么我不能从一开始就改变原始的someDoc?为什么更改不适用于我发送给客户的someDoc

其次,为什么 lodash 不像上一个那样工作。例子?

最后,请问这种情况下的最佳做法是什么?

谢谢!

【问题讨论】:

  • 如果你的问题没有解决,请留言,否则接受我的回答,谢谢

标签: node.js mongodb express mongoose lodash


【解决方案1】:

将 page.save() 的结果转换为对象,然后删除这样的字段:

result = await page.save()
let someDoc = result.toObject()
delete someDoc.propName
res.send(someDoc)

【讨论】:

  • 但是这到底是怎么回事,伙计...我检查了原始someDoc(你的result)的typeof,上面写着object!究竟是什么……?我在这里错过了什么?
  • 保存的typeof是Model of Schema不是对象,删除字段后需要转model为对象
  • 我的回答没有解决你的问题吗?
  • 我想了解“为什么”,兄弟……而不是简单地“解决”它。我至少可以用我在帖子中提到的另一种方式自己解决它。
  • 在 mongoose 中 save() 或 find() 或 findOne 或...的结果是一个 mongoose 文档,而不是一个普通的 JavaScript 对象。如果你想要一个普通的 JavaScript 对象,你应该使用 .toObject () (它适用于猫鼬文档)和 .lean() (它适用于猫鼬文档,用于查找查询的结果),如果你查看结果console.log(result) 和 console.log(someDoc) 你会明白的
猜你喜欢
  • 1970-01-01
  • 2016-11-06
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 2012-11-02
  • 2017-04-26
相关资源
最近更新 更多