我有一个数据集,我正在将其“映射”为不同的名称。使用 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官方文档来看,
$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"
}
}
}
}
])