猫鼬属性过滤器

时间:2013-10-27 21:04:28

标签: javascript node.js mongoose

我正在为现有属性寻找相当于虚拟的东西。我想在调用它时修改现有模式属性的值(例如条带标记或其他)。我目前正在使用具有不同名称的虚拟来实现此目的。当虚拟与现有属性具有相同名称时,显然Mongoose会中断。似乎没有任何前/后提取过滤器 - 建议?

1 个答案:

答案 0 :(得分:2)

假设你说你有一种不同于内部存储的“外部”格式...

如果不深入到Mongoose的内部,就没有办法以100%一致的方式完全覆盖get / set。我最近做了一些探索,这是一个深洞。 :(

你有几个合理的选择:

  1. 虚拟财产方法。您可以拥有一个实际名为_color的属性,然后将其公开为color,而不是尝试重载相同的值。然后,很明显(可能按惯例),下划线前缀值是“仅供内部使用”。
  2. 添加一个函数来获取/设置值(通过向Schema添加一个函数)。我喜欢这个,因为你可以添加一个名为toColorString的函数或类似的东西,这样就可以清楚何时/如何使用它。
  3. 如果使用虚拟/隐藏属性,则会使文档查询更加混乱,因为该属性不会以与查询数据相同的名称或与查询数据完全相同的方式公开。所以,这就是为什么我会倾向于使用自定义函数来获取给定属性/字段的自定义格式版本。