当前位置: 首页 > 知识库问答 >
问题:

具有角色的ref数组的猫鼬模式

司寇星海
2023-03-14

我对NoSQL的工作方式非常陌生,所以如果我只是完全错误地思考这个问题,请原谅(我觉得我是)。

我的应用程序有用户和组织,用户必须拥有并属于那些具有成员或所有者角色的组织。

目前在我的用户模式中,我有:

组织:[{type:Schema.Types.ObjectId,ref:'Org'}]

在我的组织架构中,我有:

成员:[{type:Schema.Types.ObjectId,ref:'User'}]

但我也希望在此附加一个成员或所有者角色。

这是我应该放在实际参考中的东西吗

成员:[{type:Schema.Types.ObjectId,ref:'User',role:String}]

或者角色应该在架构的其他地方?什么是正确的方法来处理这个问题,或者有没有一种不同的方法来图式化这个问题更合适?

一旦我正确地设置了这个模式,有一个例子来说明如何使用这个roled ref创建一些用户/组织会很有帮助。

共有1个答案

田翔
2023-03-14

你可以做一个小小的改变,你有什么。我在应用程序中以相同的方式存储消息(文本和发件人)。

以下是你可以做的:

members: [{
    role: { 
      type: String
    },
    user: { 
      type: mongoose.Schema.Types.ObjectId, 
      ref: 'User'
    }
  }],

然后,当您要向组织添加一个或多个成员时(假设您已经分别创建了一个组织和一个用户):

function addNewMember(org_id, user_id, role) {   
    var member = {role: role, user: user_id};
    Organization.findByIdAndUpdate(org_id, {"$push": {"members":member}}, function(err,org) {
               ...
             });)  
// you can use the $each clause to add a whole array of members at the same time too
// like so:
// {"$push": {"members": 
//              {
//              "$each": [memberarray]
//              }}}

}

当您想要找到一个组织,包括其成员时,您可以执行以下操作:

    Organization.findById(org_id) 
        .populate('members.user')
        .exec(callbackfunction);

如果你绝对需要复制组织,请仔细考虑-

 类似资料:
  • 问题内容: 在我正在处理的集合中,文档如下所示: 我写了这个Mongoose模式来访问它: 当我查询文档时,一切正常,控制台中显示的输出正确。但是当我尝试执行console.log(myDoc.stuff)时,得到了以下信息: 代替 我究竟做错了什么?谢谢您的帮助!! 问题答案: 免责声明:此回复的日期过早,2012年!这可能不是最准确的。 从猫鼬的文档。 http://mongoosejs.co

  • 问题内容: 如何将一个架构添加到另一个架构?这似乎无效: 我检查了网站,它显示了如何为数组声明而不是为单个声明。 谢谢 问题答案: 有几种方法可以做到这一点。最简单的就是这样: 然后,您只需确保您的应用程序正在编写该ID,并在查询中使用该ID即可根据需要提取“相关”数据。 按用户ID搜索任务很好,但按任务ID查询用户则比较麻烦: 另一种方法是利用Mongoose的填充功能来简化查询。为此,您可以执

  • 我需要将一个数组中的对象推入数据库,但我得到了一个错误。我做错了什么?我发现这样一个话题,通过猫鼬将物品推入mongo数组却无法正确应用.............................................................. 当我尝试这个代码时,我得到了这个答案 MongooseError:文档在保存前必须有_ID

  • 问题内容: 我如何知道已保存数据的模型计数?有一种方法,但似乎无效。 是一个对象,调用哪个方法可以得到实数? 谢谢 问题答案: 下面的代码有效。注意countDocuments的使用。

  • 问题内容: 在阅读教程时,通常会在模式和模型之间进行区分,特别是在处理mongoose / mongodb时。由于在该系统下似乎不存在“模型”,因此移植到Postgresql会有些混乱。两种方法有什么区别? 例如,此行的postgres / sql ORM等价于什么? (猫鼬和express.js): 问题答案: 在猫鼬中,模式表示特定文档的结构,可以是完整文档,也可以是文档的一部分。这是表达期望

  • 问题内容: 我刚开始是猫鼬。我有一个带猫鼬的创建脚本,该脚本用示例数据创建模式和数据库。 现在,我编写实际的应用程序。每次我的应用程序运行时,我是否需要创建模式对象,或者它已经以某种方式可用? 换句话说,我是否需要在每个使用猫鼬访问数据库的应用程序中运行此代码,还是仅在第一次运行此代码: 如果我有设置器/验证器/等,答案将如何变化? 问题答案: 一个定义就是让应用程序理解如何将数据从MongoDB