mongodb - 如何根据第一次出现的分隔符 MongoDB 拆分列
问题描述
我有一个这样的列,它应该根据第一个“-”进行拆分,示例如下
MGESAD :
"6095 - NCAM - US - GIUTCB - US Consumer Bank - USRB"
"6595 - NBAM - US - UDAS - Consumer Bank - USRB"
"0595 - NWWAM - US - GWCB - US BANK Bank - USRB - TBL"
I need to split this column into:
Col1 Col2
6095 NCAM - US - GIUTCB - US Consumer Bank - USRB
6595 NBAM - US - UDAS - Consumer Bank - USRB
0595 NWWAM - US - GWCB - US BANK Bank - USRB - TBL
到目前为止尝试过:
db.getCollection("arTes").aggregate([
{
$addFields: {
MGE_ID: { $arrayElemAt: [ { "$split": [ "$MGESAD y", "-"] }, 0 ] },
MGE_DESC: { $arrayElemAt:[{ "$split": [ "$MGESAD ", "-"] },2] }
}
}
])
MGE_DESC 只给出 2 个元素,我需要整个字符串,不包括第一个拆分。
让我知道是否有更简单的方法可以做到这一点?
解决方案
询问
- 管道更新需要 MongoDB >= 4.2
- 因为您想在“-”的第一个索引上拆分,所以您可以在不拆分所有“-”出现的情况下进行拆分
- 波纹管找到“-”的索引,左边是
MGESAD
,右边是MGE_DESC
*如果您只想聚合,请使用聚合中的["$set" ...]
管道
*如果您不想为第一个或最后一个“-”执行此操作,则可以split
然后$concat
可能$reduce
取决于您的需要,但这里更简单,因此未使用
updade({},
[{"$set":
{"MGESAD":
{"$substrCP": ["$MGESAD", 0, {"$indexOfCP": ["$MGESAD", " - "]}]},
"MGE_DESC":
{"$substrCP":
["$MGESAD",
{"$add": [{"$indexOfCP": ["$MGESAD", " - "]}, 3]},
{"$strLenCP": "$MGESAD"}]}}}],
{"multi" : true})
推荐阅读
- wordpress - WP STATELESS PLUGIN CPU 使用率高
- c# - C# 编码:如何确保调用了终结器?
- ios - iOS:根据内容的高度更改collectionView标头的高度
- android - 从 Android Studio 项目中的模块读取文件的问题
- r - 在 tidyr 和 dplyr 中按模式(单词)分隔
- django - 在管理员中检查类 CustomUserAdmin 错误的字段/字段集/排除属性
- ansible - 如何将此临时命令编写为剧本
- apollo - 如何将 password-js 正确集成到 apollo-server?
- java - 在 Spring Boot 项目中的 Cucumber 测试之前运行 Flyway 脚本
- python - 线程时如何中断 Python I/O 操作?