带有嵌入式数据透视表的多对多

杰罗尔梅德

我正在尝试选择所有引用一个组的用户,这些组引用的权限已将“有效”设置为true(可能是多个)。为了实现这一点,我计划使用带有查找的聚合。

db={
  "users": [
    {
      "_id": "1",
      "groups": [
        "2"
      ]
    },
    {
      "_id": "2",
      "groups": [
        "1"
      ]
    }
  ],
  "group": [
    {
      "_id": "1",
      "permissions": [
        "12",
        "3"
      ]
    },
    {
      "_id": "2",
      "permissions": [
        "3",
        "2"
      ]
    }
  ],
  "permission": [
    {
      "_id": "12",
      "valid": true
    },
    {
      "_id": "3",
      "valid": true
    },
    {
      "_id": "2",
      "valid": true
    }
  ]
}

我想不出一种有效/简单的方法来做到这一点。

我有2个主意:

  1. 从用户到组进行查找,并使用从组到权限进行查找的管道。这里的问题是我需要执行$ match来查看用户的组列表是否包含组ID(我不知道是否可能)
  2. 从用户到组进行简单查找,而不是展开合并的字段,然后使用从组到权限的合并的字段进行第二次查找。最后,使用$ match来查看是否包含“ valid” true,然后将结果分组以获取原始用户。这个想法听起来并不十分有效。https://mongoplayground.net/p/JB9Yb3a65Cn

有什么想法或意见吗?

土生的
  • 您可以使用对象的直接数组,而无需$unwind在本地字段中查找,
  • 第二次查找将grouppermissions响应替换该字段,因为在下一阶段不需要它
db.users.aggregate([
  {
    $lookup: {
      from: "group",
      localField: "groups",
      foreignField: "_id",
      as: "group"
    }
  },
  {
    $lookup: {
      from: "permission",
      localField: "group.permissions",
      foreignField: "_id",
      as: "group"
    }
  },
  { $match: { "group.valid": true } },
  { $unset: "group" }
])

操场

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有嵌入式数据透视表的多对多

来自分类Dev

更新mongodb中的多嵌入式数据

来自分类Dev

更新mongodb中的多嵌入式数据

来自分类Dev

具有多对多表的数据透视表

来自分类Dev

带有嵌入式表的动态SQL

来自分类Dev

带有负数的嵌入式除法

来自分类Dev

带有嵌入式码头的招摇

来自分类Dev

具有多索引的Pandas子数据透视表和总数据透视表

来自分类Dev

具有多列基础数据透视表的 T-SQL 数据透视表

来自分类Dev

Laravel多对多数据透视表

来自分类Dev

Serenity BDD报告未显示带有示例的故事(嵌入式表)

来自分类Dev

嵌入式表垂直滚动并带有固定标题

来自分类Dev

通过带有嵌入式传单SVG等的RSelenium提取基础数据

来自分类Dev

Laravel 4-多对多-数据透视表未更新

来自分类Dev

使用相同的数据透视表使用子类休眠多对多

来自分类Dev

Laravel雄辩的多对多关系:使用显式数据透视表

来自分类Dev

带有嵌入式图像的段落会破坏应用程序脚本,将工作表数据合并到文档中

来自分类Dev

带有多个表的数据透视表

来自分类Dev

带有嵌入式API密钥的静态API文档

来自分类Dev

带有多个嵌入式图标的EXE

来自分类Dev

发送带有嵌入式图像的电子邮件

来自分类Dev

Hibernate抛出带有嵌入式ElementCollection的ConcurrentModificationException

来自分类Dev

带有Java EE 7 WebSocket的嵌入式tomcat

来自分类Dev

带有插件的Cordova 3.5嵌入式Webview

来自分类Dev

带有嵌入式MonthCalendar问题的UserControl

来自分类Dev

Restangular:带有包含嵌入式数组的对象的getList

来自分类Dev

Perl解析带有嵌入式逗号的CSV文件

来自分类Dev

带有嵌入式功能的Python内存爆炸

来自分类Dev

带有嵌入式ElementCollections的JPA CriteriaBuilder

Related 相关文章

热门标签

归档