arrays - 基于数组元素 mongoDB 的组
问题描述
说明:我们如何根据数组元素进行分组,我想根据两个数组的 0 元素进行分组。
{
"st": [
[
"2011-01-04T12:18:41Z",
0
],
[
"2011-01-04T15:00:00Z",
0
]
],
"en": [
[
"2011-01-04T14:59:50Z",
1
],
[
"2011-01-04T15:05:00Z",
4
]
]
}
预期的输出文件看起来像。例如
[
{
"st": "2011-01-04T12:18:41Z",
"en": "2011-01-04T14:59:50Z",
"st_val": 0,
"en_val": 1,
"total_index_count": 2
},
{
"st": "2011-01-04T15:00:00Z",
"en": "2011-01-04T15:05:00Z",
"st_val": 0,
"en_val": 4,
"total_index_count": 2
}
]
解决方案
您可以通过几种不同的方式执行此操作,这是一种利用$map
and$arrayElemAt
运算符的方法。
db.collection.aggregate([
{
"$project": {
elements: {
$map: {
input: {
$range: [
0,
{
$size: "$st"
}
]
},
in: {
st_val: {
"$arrayElemAt": [
{
"$arrayElemAt": [
"$st",
"$$this"
]
},
0
]
},
st: {
"$arrayElemAt": [
{
"$arrayElemAt": [
"$st",
"$$this"
]
},
1
]
},
en_val: {
"$arrayElemAt": [
{
"$arrayElemAt": [
"$en",
"$$this"
]
},
0
]
},
en: {
"$arrayElemAt": [
{
"$arrayElemAt": [
"$en",
"$$this"
]
},
1
]
},
}
}
}
}
},
{
$unwind: "$elements"
},
{
$replaceRoot: {
newRoot: "$elements"
}
}
])
推荐阅读
- string - 如何编写不需要引号的bash函数?
- office-js - Excel JS 加载项:将非敏感数据存储在隐藏的工作表与工作簿设置中
- azure - 找不到 Azure 数据工厂
- javascript - 如何在 python 模板中使用我的“SearchDate”替换 type = date Valuse,
- python - 用今天和 10 个时期后每个细分市场中的客户数量初始化一个矩阵 - R 到 Python
- java - 找到最大匹配 3 个三角形数
- php - 将网站访问者重定向到 Nginx 中的 Bowser 语言(url 重写)
- android - Flutter:添加网址后如何显示加载屏幕?
- antlr4 - ANTLR4:遵循什么设计模式?
- sql - JPA Criteria 2 嵌入了 JOIN 和它们之间的条件