在 AWS DocumentDB 中创建包含两个集合的 mongoDB 视图

问题描述 投票:0回答:1

我有两个集合,很少有共同的属性。

例如:

工科学生

  • 学生证
  • 名字
  • 卷数
  • 出生日期
  • 入学年份

理科生

  • 学生证
  • 名字
  • 卷数
  • 出生日期
  • 入学年份

两个藏品都有自己的财产。我想创建一个名为 Student 的视图,其中包含两个学生。

MongoDB 支持 createView。但 DocumentDB 不支持视图。

使用 unionWith 进行聚合:documentDB 也不支持此功能。

我们还有其他方法可以实现类似的功能吗? $lookup 正在执行左外连接,但对于我的用例来说,它是联合而不是连接。

mongodb spring-boot mongodb-query aws-documentdb aws-documentdb-mongoapi
1个回答
0
投票

您可以使用

$lookup
“条件连接”语法来强制“完全连接”,这是一个简单的示例:

db.EngineeringStudent.aggregate([
  {
    $facet: {
      EngineeringStudent: [
        {
          $match: {}
        }
      ],
      ScienceStudent: [
        {
          $limit: 1
        },
        {
          $lookup: {
            from: "ScienceStudent",
            pipeline: [],
            as: "ScienceStudent"
          }
        },
        {
          $unwind: "$ScienceStudent"
        },
        {
          $replaceRoot: {
            newRoot: "$ScienceStudent"
          }
        }
      ]
    }
  },
  {
    $project: {
      users: {
        "$concatArrays": [
          "$EngineeringStudent",
          "$ScienceStudent"
        ]
      }
    }
  },
  {
    $unwind: "$users"
  },
  {
    $replaceRoot: {
      newRoot: "$users"
    }
  }
])

蒙戈游乐场

这样做的缺点是需要源集合(在我的示例中,“EngineeringStudent”集合至少有 1 个文档。

在不了解您的应用程序和要求的情况下,让我提出一个快速建议,而不是重复具有相同结构的多个集合,为什么不将它们统一到带有

department
字段的一个模式中呢?

然后您可以将所有用户放在同一个集合中,同时还允许您根据其部门查询子集。

{
      "studentId",
      "name",
      ...
     "department": "engineer" | "Science" ...
}
© www.soinside.com 2019 - 2024. All rights reserved.