我有两个集合,很少有共同的属性。
例如:
工科学生
理科生
两个藏品都有自己的财产。我想创建一个名为 Student 的视图,其中包含两个学生。
MongoDB 支持 createView。但 DocumentDB 不支持视图。
使用 unionWith 进行聚合:documentDB 也不支持此功能。
我们还有其他方法可以实现类似的功能吗? $lookup 正在执行左外连接,但对于我的用例来说,它是联合而不是连接。
您可以使用
$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" ...
}