MongoDB聚合。获取价值差异
我一直在与mongo进行斗争,试图找到一个解决方案来显示价值观之间的差异 我有这样的价值观:MongoDB聚合。获取价值差异,mongodb,Mongodb,我一直在与mongo进行斗争,试图找到一个解决方案来显示价值观之间的差异 我有这样的价值观: [ {val: 1}, {val: 4}, {val: 7}, {val: 8}, {val: 11} ] [ {diff: 3}, {diff: 3}, {diff: 1}, {diff: 3} ] 我想收到这样的东西: [ {val: 1}, {val: 4}, {val: 7}, {val:
[
{val: 1},
{val: 4},
{val: 7},
{val: 8},
{val: 11}
]
[
{diff: 3},
{diff: 3},
{diff: 1},
{diff: 3}
]
我想收到这样的东西:
[
{val: 1},
{val: 4},
{val: 7},
{val: 8},
{val: 11}
]
[
{diff: 3},
{diff: 3},
{diff: 1},
{diff: 3}
]
通过取下一个值(4)并减去上一个值(1),计算每个值。在所有这些之后,我们在输出中收到3,它作为第一项位于第二个列表中
是否可以使用MongoDB聚合实现它?您需要将它们分组到阵列中,计算差异并再次展平 伪码 将以下步骤添加到管道中:
db.collection.aggregate([
{
$group: {
_id: null,
data: { $push: "$$ROOT" }
}
},
{
$addFields: {
data: {
$map: {
input: {
$range: [
0,
{
$subtract: [
{ $size: "$data" },
{ $mod: [ { $size: "$data" }, 2 ] }
]
},
1
]
},
as: "idx",
in: {
diff: {
$subtract: [
{
$arrayElemAt: [
"$data.val",
{
$add: [ "$$idx", 1 ]
}
]
},
{
$arrayElemAt: [ "$data.val", "$$idx" ]
}
]
}
}
}
}
}
},
{
$unwind: "$data"
},
{
$replaceRoot: {
newRoot: "$data"
}
}
])
{val:1}
是单个文档还是数组项?它是聚合管道输出。(就像一份文件一样)