如何解决MongoDB视图中的公式
我正在尝试创建一个MongoDB视图,该视图汇总最近365天插入的数据。在$ match阶段,在处理数据之前,我使用以下公式:
{
$match: _created: { $gte: new Date((new Date()).getTime() - (365 * 24 * 60 * 60 * 1000)) }
}
这似乎起初是可行的,但后来我注意到该公式在创建之前已求值,并且视图最终显示为
{
$match: _created: { $gte: ISODate('2019-10-17T21:51:10.000Z') }
}
它当然不会随着时间的流逝而更新。
我正在使用MongoDB社区服务器v4.4.1;有没有办法在视图中插入公式本身,而不是静态结果?
在此先感谢您提供任何有用的评论。
解决方法
以下汇总管道将与日期查询一起使用,以查找上一年内的数据。该管道可以与视图一起使用。
[ {
$match: {
$expr: {
$gte: [ "$created",{ $subtract: [ "$$NOW",31536000000 ] } ]
}
}
} ]
$$NOW
是聚合system variable,其值将设置为在视图上运行查询时的日期。
值31536000000
是(365 * 24 * 60 * 60 * 1000)
。
[编辑添加]
我从mongo
shell尝试过的代码(假设集合名称为coll
,日期字段为created
)。
// The aggregation pipeline
> var pipeline = [ {
$match: {
$expr: {
$gte: [ "$created",31536000000 ] } ]
}
}
} ]
// Create view,using the above pipeline
> db.createView(
"coll_year_view","coll",pipeline
)
// Query the view
> db.coll_year_view.find()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。