mongodb - 项目嵌入文档键值,基于 mongoDB 聚合中的条件
问题描述
我有一个名为tickets的mongo集合,我们将ticket详细信息存储在类似的结构文档中,如下所示:
[
{
"status": "PAUSED",
"lifecycle_dates": {
"OPEN": "d1",
"CLOSED": "d2",
"PAUSED": "d3"
}
},
{
"status": "OPEN",
"lifecycle_dates": {
"OPEN": "d1",
"PAUSED": "d3"
}
},
{
"status": "CLOSED",
"lifecycle_dates": {
"OPEN": "d1",
"CLOSED": "d2"
}
}
]
我需要获取显示票证当前状态和状态日期的数据。
我想投影数据,例如:
[
{
"status": "PAUSED",
"lifecycle_date": "d3"
},
{
"status": "OPEN",
"lifecycle_date": "d1"
},
{
"status": "CLOSED",
"lifecycle_date": "d2"
}
]
如何根据 mongo 聚合管道中的当前状态预测单个生命周期日期?像这样的东西:
{
$project : {
"status" : 1,
"lifecycle_date" : $lifecycle_dates[$status]
}
}
在此处的 mongo 参考文档中找不到任何参考或类似问题
当前的mongo版本:3.2
解决方案
更新答案:
由于您需要按 获取date
,因此status
可以使用此聚合查询:
db.test.aggregate([
{
$project : {
_id : 0,
status : 1,
lifecycle_date : { $cond: [ {$eq : ["$status","OPEN"]}, "$lifecycle_dates.OPEN", { $cond: [ {$eq : ["$status","CLOSED"]}, "$lifecycle_dates.CLOSED", { $cond: [ {$eq : ["$status","PAUSED"]}, "$lifecycle_dates.PAUSED", "-1" ]} ]} ]}
}
}])
这也与 Mongo 3.2 兼容。
输出 :
{ "status" : "PAUSED", "lifecycle_date" : "d3" }
{ "status" : "OPEN", "lifecycle_date" : "d1" }
{ "status" : "CLOSED", "lifecycle_date" : "d2" }
==================================================== ========================
这个答案是针对上一个问题的——
使用此聚合:
db.test.aggregate([
{
$project : {
_id : 0,
status : 1,
lifecycle_date : "$lifecycle_dates.PAUSED"
}
}
])
输出 :
{ "status" : "PAUSED", "lifecycle_date" : "d3" }
推荐阅读
- sql - 如何将数据转换为给定的格式?
- sql - 对同一张表的外键约束可能会导致循环或多个级联路径
- python - 如何在 Python 3.7 中重新实现 Python 的 __qualname__?(有一些小的调整)
- ios - iOS 14 Beta - CloudKit - coredata 在公共数据库中共享记录
- django - Django ORM。根据条件加入子查询
- windows - 将变量值与另一个变量作为名称的一部分
- .net - .net:反序列化具有不同数量相同对象但不属于数组的 json 的聪明方法?
- c# - Unity:On Touch 将分数设置为零
- flutter - 配置项目 ':onesignal_flutter 时出现问题
- azure - 如何使用 SSIS 脚本或 Azure 逻辑应用任务将 Excel 文件从一个 Azure Blob 容器转换为另一个