group基于数组元素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$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"
}
}
])

Mongo操场

最新更新