使用 mongoose 添加子子文档项

Posted

技术标签:

【中文标题】使用 mongoose 添加子子文档项【英文标题】:Add sub-subdocument items with mongoose 【发布时间】:2017-02-22 21:55:57 【问题描述】:

我有以下文档结构,需要使用 mongoose 添加到子子文档中:

var organization = module.exports = mongoose.Schema(
    teams: [
                permissions: [ permission: String ]
    ]
)

organization.methods.addTeam = function(team)
    //the save occurs in a repository layer later on, for now I am just prepping the object for the save
        this.teams.push(team);
        var subdoc = this.teams[0];
        subdoc.isNew;


//Ideally, something like this would be great but I have not been able to find any doc that really provides a good example on this scenario
organization.methods.addPermission = function(id(team), permission)
    var teams = this.teams.id(id)
    teams.permissions.push(permission);
    var subsubdoc = teams.permission[0];
    subsubdoc.isNew;

我是 node.js 和 mongodb 的新手,我遇到了子子文档的以下问题。在以下示例中,我需要添加到权限数组。根据我找到的示例,我在组织架构上添加了一个新方法来处理将团队添加到组织中。我想向组织架构添加一个类似的方法来处理向团队子文档添加权限。我还想在添加之前检查并确保权限不存在。我应该如何处理这种情况?

【问题讨论】:

【参考方案1】:

看看 MongoDB 的 $addToSet 运算符。

// file: modules/organization/add_permission.js

var Organization = mongoose.model('Organization');

exports.addPermission = function(teamId, permission) 

  Organization.update(
    _id: teamId, // query
    $addToSet: permissions: permission: permission, // update
    function(err)  // callback
       // handle error
       // other logic
    
  );
;

或者在你的 Organization mongoose 模型上做一些类似的方法。

【讨论】:

以上是关于使用 mongoose 添加子子文档项的主要内容,如果未能解决你的问题,请参考以下文章

使用聚合 mongodb mongoose 将集合子子文档与其他集合子文档连接起来

文档不会使用带有 mongoose 的 save() 方法保存

Node中使用MongoDB

nestjs mongoose .insertMany 不是函数

mongoose基本增删改查

使用 graphql-compose-mongoose 将对象添加到 mongodb 模型中的对象数组