MongoDB 基于同一集合中文档的聚合增值
MongoDB Aggregation add value based on document in same collection
我似乎无法解决 MongoDB 聚合管道的问题。
我这里有以下文件 ->
{
name: 'name',
values: [
{ value: 12, date: 2019-01-01 },
{ value: 26, date: 2019-01-02 },
{ value: 34, date: 2019-01-03 }
]
}
我有一个聚合管道 运行,我想用 $project ->
输出以下文档
{
name: 'name',
values: [
{ value: 12, date: 2019-01-01, changeDay: 0 },
{ value: 26, date: 2019-01-02, changeDay: 14 },
{ value: 34, date: 2019-01-03, changeDay: 8 }
]
}
也就是说,我需要将 changeDay 减去文档中的值减去该文档之前的文档中的值,依此类推。
我希望我说得够清楚了。
如果有帮助-我正在尝试按时间范围查询一个简单的时间序列文档,我需要输出每天的值变化。
到目前为止我有这个 MongoDB 聚合 ->
`[
{
'$match': {
'pageid': '36606016799'
}
}, {
'$lookup': {
'from': 'likes',
'localField': 'likes',
'foreignField': '_id',
'as': 'likes'
}
}, {
'$unwind': {
'path': '$likes'
}
}, {
'$match': {
'likes.date': {
'$gte': Date('Sat, 29 Dec 2018 22:00:00 GMT'),
'$lte': Date('Tue, 01 Jan 2019 22:05:00 GMT')
}
}
}, {
'$group': {
'_id': '$name',
'likes': {
'$push': '$likes'
},
'picture': {
'$first': '$$ROOT.picture'
}
}
}, {
'$project': {
'_id': 1,
'picture': 1,
'likes': {
'value': 1,
'change': {
'$map': {
'input': '$likes',
'as': 'like',
'in': {
'$add': [
'$$like.value', 100
]
}
}
}
}
}
}
]`
你可以看到我在最后一个 $project 阶段尝试了 $map,但这在这里不起作用......我不知道我怎么能 select 一个项目之前的项目cursor 当前是,达到它的值并减去...
我不确定聚合管道是否可行。
但如果确实如此,就不值得让聚合如此复杂。
获取数据,然后在服务器端执行业务逻辑。
我似乎无法解决 MongoDB 聚合管道的问题。
我这里有以下文件 ->
{
name: 'name',
values: [
{ value: 12, date: 2019-01-01 },
{ value: 26, date: 2019-01-02 },
{ value: 34, date: 2019-01-03 }
]
}
我有一个聚合管道 运行,我想用 $project ->
输出以下文档{
name: 'name',
values: [
{ value: 12, date: 2019-01-01, changeDay: 0 },
{ value: 26, date: 2019-01-02, changeDay: 14 },
{ value: 34, date: 2019-01-03, changeDay: 8 }
]
}
也就是说,我需要将 changeDay 减去文档中的值减去该文档之前的文档中的值,依此类推。
我希望我说得够清楚了。
如果有帮助-我正在尝试按时间范围查询一个简单的时间序列文档,我需要输出每天的值变化。
到目前为止我有这个 MongoDB 聚合 ->
`[
{
'$match': {
'pageid': '36606016799'
}
}, {
'$lookup': {
'from': 'likes',
'localField': 'likes',
'foreignField': '_id',
'as': 'likes'
}
}, {
'$unwind': {
'path': '$likes'
}
}, {
'$match': {
'likes.date': {
'$gte': Date('Sat, 29 Dec 2018 22:00:00 GMT'),
'$lte': Date('Tue, 01 Jan 2019 22:05:00 GMT')
}
}
}, {
'$group': {
'_id': '$name',
'likes': {
'$push': '$likes'
},
'picture': {
'$first': '$$ROOT.picture'
}
}
}, {
'$project': {
'_id': 1,
'picture': 1,
'likes': {
'value': 1,
'change': {
'$map': {
'input': '$likes',
'as': 'like',
'in': {
'$add': [
'$$like.value', 100
]
}
}
}
}
}
}
]`
你可以看到我在最后一个 $project 阶段尝试了 $map,但这在这里不起作用......我不知道我怎么能 select 一个项目之前的项目cursor 当前是,达到它的值并减去...
我不确定聚合管道是否可行。 但如果确实如此,就不值得让聚合如此复杂。 获取数据,然后在服务器端执行业务逻辑。