Mongodb 聚合“$project”2 个字段中的 1 个在第二个字段上失败

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

我有一个数据集,我正在将其“映射”为不同的名称。使用 Mongodb 7.0。 我正在使用聚合 我正处于“$项目阶段

{ 
    _id: 0,
    "First Name": "Executive First Name",
    "Last Name": "Executive Last Name",
    "Title": { $switch: {
      branches: [
        {
          case: { $ne: [ "$Executive Title", null ] },
          then: "$Executive Title"
        },
      ],
      default: "$Professional Title"
    }}
}

因此,我的源数据具有很长的标签名称,并且我的输出(用于将 CSV 导入到另一个系统)具有不同的标签名称。

$switch 语句快要死我了。 当“$Executive Title”存在(并且有一个值)时,我会在“Title”字段中得到“$Executive Title”(标签,无论如何 - 我仍在努力了解 Mongodb 的术语)。

当“$Executive Title”不存在时,应使用“$Professional Title”填充“Title”字段。相反,我没有得到任何数据,并且“标题”字段不存在。

我交换了 2 个源字段(“$Executive Title”和“$Professional Title”)并且行为相反。

我尝试过 $cond 逻辑,结果完全相同。第一个提到的领域有效,第二个则无效。

我已经有了“$Professional Title”的第二个“case:”语句,但它不会改变结果。

我不知道 $project 作为一个阶段是否不允许在作业中第二次引用不同的字段或者什么???但第二次参考总是失败。

转换示例:

{
"_id": 1,
"Executive First Name": "Bob",
"Executive Last Name": "Crachet",
"Executive Title": "Boss"
},
{
"_id": 2,
"Executive First Name": "Mary",
"Executive Last Name": "Nolan",
"Professional Title": "DDS"
}

转变为:

{
"First Name": "Bob",
"Last Name": "Crachet",
"Title": "Boss"
},
{
"First Name": "Mary",
"Last Name": "Nolan"
}

我希望转换的第二条记录具有“标题”:“DDS”条目....

我已经搜索了几个小时,但似乎无法找到合适的措辞来获得答案。

我没有使用 db.collection.find。我正在使用 db.collection.aggregation。

新的和困惑的。

mongodb project aggregation compass
1个回答
0
投票

MongoDB官方文档来看,

$ne
用于表示存在的字段。对于您的情况,您可以使用
$ifNull
将不存在的字段回退到值
null

db.collection.aggregate([
  {
    "$project": {
      _id: 0,
      "First Name": "Executive First Name",
      "Last Name": "Executive Last Name",
      "Title": {
        $switch: {
          branches: [
            {
              case: {
                $ne: [
                  {
                    $ifNull: [
                      "$Executive Title",
                      null
                    ]
                  },
                  null
                ]
              },
              then: "$Executive Title"
            }
          ],
          default: "$Professional Title"
        }
      }
    }
  }
])

蒙戈游乐场

© www.soinside.com 2019 - 2024. All rights reserved.