node.js - 为什么我无法“直接”将 Mongoose 对象的值更改为不同的类型?
问题描述
我刚刚花了一个小时弄清楚一些令人难以置信的事情(至少对我来说,作为一个 JS 菜鸟),我想了解底层逻辑(或者只是为什么它会这样工作,因为我认为它不合逻辑并且非常出乎意料)。
假设我正在使用 Mongoose 从数据库中检索文档,其中部分或全部包含一个日期属性(使用 创建new Date()
)、一个数字属性和一个字符串属性。
[{
string: 'foo',
date: '2018-10-13T21:11:39.244Z',
number: 10
},
...
{
string: 'bar',
date: '2018-10-13T21:12:39.244Z',
number: 20
}]
因此,我获得了一个对象数组,现在想要获取每个对象的日期属性并将值更改为字符串,所以我执行以下操作:
doc.find({}, (err, list) => {
list.forEach((item, index) => {
list[index].date = 'new value'
})
})
但我不能那样做!
我可以做得list[index].string = 'new value'
很好,list[index].date = new Date()
但我不能更改不同类型的值,在这个例子中date
和number
.
但是,当我这样做时,我list[index]._doc.date = 'new value'
花了很长时间才弄清楚,因为我不知道 Mongoose 对象不仅仅是普通的旧对象,而是专注于解决我没有的问题,我可以修改该值就好了。
似乎只有当值的类型匹配时,猫鼬对象才会以某种方式转换obj.key
为obj._doc.key
,但我希望得到比我未受过教育的猜测更详细的解释。
解决方案
我想您想在文档字段上使用多类型,当您定义模式时,Mongoose 通过“混合”类型支持这一点。
您可以从https://mongoosejs.com/docs/schematypes.html#mixed获得更多详细信息。
推荐阅读
- actions-on-google - 如何将 Google Voice Kit 连接到由同一帐户创建的 Google Actions?
- python - 字母频率:绘制一个对 PYTHON 值排序的直方图
- mysql - 如何在mysql查询中获得总和?
- python - Pandas 为循环性能问题重新采样
- maven - 如何将输出的 Jar 和 War 文件放在另一个指定的文件夹中(它可能在项目之外)?
- python - 如何使用 python 从给定坐标创建 3D 表面?
- extjs - 使用 Extjs 的空白数字字段
- amazon-web-services - 在 S3 过滤器前缀中指定通配符
- php - 在服务器中使用锚按钮的问题(cent os)
- android - Xamarin.Android:密钥侦听器不起作用