我的 MongoDb 中有两个集合
- metricCollectionForms
- 公制
文档看起来像metricCollectionForms
这样
{
"_id": ObjectId("5ea25f38afd94f0008d4e6f2"),
"approverId": "f08ba2aa-4597-41f0-9e6c-cebf1715ba30",
"formName": "Test Form",
"formId": "d56209a1-4df0-48de-b6cf-d1ee50200936",
}
我从上面的文档中跳过了一些属性,因为它们与这个问题无关。
至于metric
一个典型的文件看起来像这样
{
"_id": ObjectId("5ea27955bae4900008d996ba"),
"name": "Test Metric",
"type": "INTERNAL",
"formula": [
{
"type": "FORM_FIELD",
"formId": "d56209a1-4df0-48de-b6cf-d1ee50200936",
"formFieldId": "dca2bacf-2cbd-480d-8289-6f3050b635fb"
},
{...}, {...}
],
"formulaLabel": "monthly_production",
"createdBy": "f08ba2aa-4597-41f0-9e6c-cebf1715ba30",
"isApproved": true,
"isActive": false
}
您会注意到文档的公式数组字段中引用了formId
from 的值。metricCollectionForms
formId
metric
因此,一个度量可以在其对象的公式数组中使用多种形式。
我正在尝试获取表单列表,并在该列表中返回度量名称数组,其中
metric.formula.formId = formId(表单)AND metric.isActive = true AND metric.isApproved = true
到目前为止,我的聚合查询看起来像这样:
{
$lookup: {
from: "metric",
localField: "formId",
foreignField: "formula.formId",
as: "metrics"
}
},
{
$addFields: {
metrics: "$metrics.name"
}
}
现在它确实返回了一个包含所有指标名称的数组,但我不知道如何在 $lookup 上应用 isApproved 和 isActive true 条件。
我尝试做 $pipeline / $match 等,但似乎没有任何效果。此外,该解决方案应该与 Mongo 3.6 兼容,因为我在 AWS DocumentDb(仅支持 3.6)中使用它。