在findOne之后,mongoose无法保存子文档数组

时间:2014-11-03 18:49:43

标签: mongodb mongoose

我正在尝试做这样的事情:

Industry.findOne({_id: id}).exec(function(err, industry){

    industry.stats = _.extend(industry.stats, stats);    //.......(1)

    industry.save(function(err) {
         // nothing is saved
    });
});

(1)中的industry.log的console.log是

[{ stat_id: 545080c8e4e88b1d5a7a6d1b}{ stat_id: 54526ca6b294096d33ca6b36 }]

这不起作用,显然行业.stats不是一个对象数组,并且错过了两个对象之间的逗号。 (我正确地说明了这一点吗?)

如果我像这样直接分配industry.stats

[{stat_id: 545080c8e4e88b1d5a7a6d1b}, {stat_id: 54526ca6b294096d33ca6b36}]

然后它正在运作。是否需要先将(1)转换为对象数组?我尝试了lean()和toObject()等等,但我没有运气。我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

Lodash extend会将源对象的自身可枚举属性分配给目标对象。在这种情况下,源(stats)的数组属性将复制到industry.stats。这不适用于数组。

您必须通过数组函数(pushpull,...)更新数组或直接设置字段。