【发布时间】:2021-06-08 17:18:14
【问题描述】:
我的收藏数据是这样的:
[
{ "_id": 1, "s": "a", "kc": 100 },
{ "_id": 2, "s": "a", "kc": 101 },
{ "_id": 3, "s": "a", "kc": 102 },
{ "_id": 4, "s": "a", "kc": 103 },
{ "_id": 5, "s": "b", "kc": 200 },
{ "_id": 6, "s": "b", "kc": 201 },
{ "_id": 7, "s": "b", "kc": 202 },
{ "_id": 8, "s": "b", "kc": 203 }
]
我使用这个聚合:
db.collection.aggregate([
{
"$group": {
_id: "$s",
kcList: {
"$push": "$kc"
}
}
}
])
结果如下:
[
{
"_id": "a",
"kcList": [
100,
101,
102,
103
]
},
{
"_id": "b",
"kcList": [
200,
201,
202,
203
]
}
]
我想更改我的查询,使kcList 中的数据分组时,每个项目都乘以它的数组索引。
我想要的结果如下:
[
{
"_id": "a",
"kcList": [
100 * 0,
101 * 1,
102 * 2,
103 * 3
]
},
{
"_id": "b",
"kcList": [
200 * 0,
201 * 1,
202 * 2,
203 * 3
]
}
]
所以我写了这个查询:
db.collection.aggregate([
{
"$group": {
_id: "$s",
kcList: {
"$push": {
"$multiply": [
"$kc",
{
$cond: {
if: {
$isArray: "$kcList"
},
then: {
$size: "$kcList"
},
else: 0
}
}
]
}
}
}
}
])
但是结果是错误的:( 你有什么办法解决这个问题吗?
【问题讨论】:
-
您提供的预期输出不清楚。
100 * 0、101 * 1是什么意思? -
100 , 101 , 102 , 103 是“kc”值,0 , 1 , 2 , 3 是数组项索引
标签: mongodb mongodb-query aggregation-framework