首页 > 解决方案 > 为什么我无法“直接”将 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()但我不能更改不同类型的值,在这个例子中datenumber.

但是,当我这样做时,我list[index]._doc.date = 'new value'花了很长时间才弄清楚,因为我不知道 Mongoose 对象不仅仅是普通的旧对象,而是专注于解决我没有的问题,我可以修改该值就好了。

似乎只有当值的类型匹配时,猫鼬对象才会以某种方式转换obj.keyobj._doc.key,但我希望得到比我未受过教育的猜测更详细的解释。

标签: node.jsmongodbmongoose

解决方案


我想您想在文档字段上使用多类型,当您定义模式时,Mongoose 通过“混合”类型支持这一点。

您可以从https://mongoosejs.com/docs/schematypes.html#mixed获得更多详细信息。


推荐阅读