mongodb - uniwind 创建只有不同值的行
问题描述
我正在使用 mongo 查询聚合,我有这样的数据
[
{
"token" : "c1",
"class" : "bscs",
courses : ["ITM", "CS54", "KHE"]
}
]
我正在使用$unwind打破课程
[
{
"token" : "c1",
"class" : "bscs",
courses : "ITM"
},
{
"token" : "c1",
"class" : "bscs",
courses : "CS54"
},
{
"token" : "c1",
"class" : "bscs",
courses : "KHE"
}
]
我想要的是,它应该是这样的:-
[
{
"token" : "c1",
"class" : "bscs",
courses : "ITM"
},
{
"token" : "",
"class" : "",
courses : "CS54"
},
{
"token" : "",
"class" : "",
courses : "KHE"
}
]
因为我有一个表格结构,我需要在其中显示数据,这非常复杂,并且那里显示了来自不同查询的大量数据,所以我无法更新它。如果是这样,那么我可以在表格中显示为
我的聚合是
[ {.....}, // others projections and matches
{
$unwind: {
path: '$courses'
}
}
]
解决方案
您可以includeArrayIndex
在运行$unwind时使用选项,然后在 index 不等于时使用$cond设置空字符串0
db.collection.aggregate([
{
$unwind: {
path: "$courses",
includeArrayIndex: "index"
}
},
{
$project: {
token: { $cond: [ { $eq: [ "$index", 0 ] }, "$token", "" ] },
class: { $cond: [ { $eq: [ "$index", 0 ] }, "$class", "" ] },
courses: 1
}
}
])
推荐阅读
- java - 找不到为什么 jmxRemoteURL 包含非 ASCII 字符
- python - 你如何在 Mac 上安装 pyinstaller
- reactive-programming - 使用项目反应器调试“NoSuchElementException:源为空”错误
- swift - 在 Lottie 中加载动画时出现问题
- visual-studio-code - 如何禁用 VS 代码中对象的解释?
- android-studio - 如何为此代码的地图添加搜索栏
- mysql - 使用 EFcore 3.0 配置 MySQL
- android - 我一直在尝试在 nativescript 应用程序中运行一些单元测试,但它抛出了 typeError Cannot set property '_moduleName' of undefined
- python - 使用复杂索引矢量化损失函数
- r - switch 和 if 语句一起使用