为什么我无法将Mongoose对象的值更改为“直接”其他类型?

时间:2018-10-13 23:12:09

标签: node.js mongodb mongoose

我花了一个好小时来弄清楚一些令人难以置信的事情(至少对我来说,是JS noob),并且我想了解底层的逻辑(或者为什么它如此工作,因为我认为这是不合逻辑的,也是非常意外的。

假设我正在使用Mongoose从数据库中检索文档,其中的一些或全部包括date属性(使用new Date()创建),数字属性和string属性。

[{
  string: 'foo',
  date: '2018-10-13T21:11:39.244Z',
  number: 10
},
...
{
  string: 'bar',
  date: '2018-10-13T21:12:39.244Z',
  number: 20
}]

因此,我获得了一个对象数组,现在想获取每个对象的date属性并将其值更改为字符串,所以我要做类似的事情:

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'时,花了很长时间才发现,因为我不知道猫鼬的对象不仅仅是普通的旧对象,而是专注于解决我没有的问题,我可以修改值就可以了。

似乎猫鼬对象只有在值的类型匹配时才将obj.key转换为obj._doc.key,但我希望得到比我没有根据的猜测更详细的解释。

1 个答案:

答案 0 :(得分:0)

我想您想在文档字段上使用多种类型,当您定义架构时,Mongoose通过“混合”类型支持此类型。

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