在 Mongoose 中保存模型无法保存嵌套组件

Posted

技术标签:

【中文标题】在 Mongoose 中保存模型无法保存嵌套组件【英文标题】:Saving Model in Mongoose fails to save nested component 【发布时间】:2015-07-18 16:28:28 【问题描述】:

我有以下模型架构:

var memberSchema = mongoose.Schema(

    'project'       :  
        'type'      : Schema.Types.ObjectId, 
        'ref'       : 'Project' 
    ,
    'first'         : String,
    'last'          : String,
    'email'         : String,
    'tracker'       : 
        'etag'      : String,
        'id'        : String,
        'photoLink' : String,
        'role'      : String,
        'type'      : String,
                      ,
    'survey'        : 
        'etag'      : String,
        'id'        : String,
        'photoLink' : String,
        'role'      : String,
        'type'      : String,
                      ,

);

我想保存一个新文档。我执行以下操作:

var Member     = require('../app/models/member');

var new_member = new Member(
  project      : project._id,
  first        : req.body.all_perms[i].first,
  last         : req.body.all_perms[i].last,
  email        : req.body.all_perms[i].email,
  tracker      : 
                    etag      : req.body.all_perms[i].etag_tracker,
                    id        : req.body.all_perms[i].ftid_tracker,
                    photoLink : req.body.all_perms[i].photoLink_tracker,
                    role      : req.body.all_perms[i].role_tracker,
                    type      : req.body.all_perms[i].type_tracker,
                 ,
  survey       : 
                    etag      : req.body.all_perms[i].etag_survey,
                    id        : req.body.all_perms[i].ftid_survey,
                    photoLink : req.body.all_perms[i].photoLink_survey,
                    role      : req.body.all_perms[i].role_survey,
                    type      : req.body.all_perms[i].type_survey,
                 ,
)
new_member.save(function(err, saved_result) )

执行此操作会成功创建新文档,但该文档不包含trackersurvey。但是,它确实包含 firstlastemail

如何成功保存新模型的嵌套组件?谢谢。

【问题讨论】:

【参考方案1】:

要在名为 type 的嵌入对象中定义字段,您需要使用对象表示法来定义其类型,否则 Mongoose 会认为它是在定义父对象的类型。

因此将您的架构更改为:

var memberSchema = mongoose.Schema(

    'project'       :  
        'type'      : Schema.Types.ObjectId, 
        'ref'       : 'Project' 
    ,
    'first'         : String,
    'last'          : String,
    'email'         : String,
    'tracker'       : 
        'etag'      : String,
        'id'        : String,
        'photoLink' : String,
        'role'      : String,
        'type'      : 'type': String,   // Here...
    ,
    'survey'        : 
        'etag'      : String,
        'id'        : String,
        'photoLink' : String,
        'role'      : String,
        'type'      : 'type': String,   // ...and here
    ,
);

【讨论】:

以上是关于在 Mongoose 中保存模型无法保存嵌套组件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Mongoose.js 保存模型时,为啥会出现“无法调用未定义的 doValidate”?

Mongoose:保存具有不同模式的嵌套 JSON

使用 Mongoose/Express/Node 在一个 POST 路由中保存多个模型文档

无法使用 mongoose Model.save() 保存 - 给出内部服务器错误

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据