MongoDB视图中的公式
我正在尝试创建一个MongoDB视图,该视图聚合过去365天插入的数据。在我的$match阶段,在对数据进行处理之前,我使用了以下公式:MongoDB视图中的公式,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我正在尝试创建一个MongoDB视图,该视图聚合过去365天插入的数据。在我的$match阶段,在对数据进行处理之前,我使用了以下公式: { $match: _created: { $gte: new Date((new Date()).getTime() - (365 * 24 * 60 * 60 * 1000)) } } 这在一开始似乎是可行的,但后来我注意到,公式在创建之前进行了评估,视图最终为 { $match: _created: { $gte: ISODate('201
{
$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
是agregion,其值将设置为在视图上运行查询时的日期
值31536000000
是(365*24*60*60*1000)
[编辑添加] 我从
mongo
shell中尝试的代码(假设集合名称为coll
,带有日期字段created
)
MongoDB JIRA上有对该功能的公开请求;“再见,非常感谢您的优雅解决方案,@prasad\uz。”。但是,我的环境说NOW变量未定义。如果你有机会,你认为你能解释这个问题吗?你正在使用的MongoDB服务器版本是什么<代码>现在对4.2或更高版本有效。而且,我曾使用
mongo
shell访问mongodbv4.2尝试过这个方法,效果很好。我使用的是mongodbcommunityserverv4.4.1。我也在Mongo Shell中进行了尝试,错误消息是相同的。我还用指南针试过,结果也一样-/我添加了创建和使用视图的代码。注意:创建视图后,mongo
shell中的show collections
命令将列出视图名称以及system.views.It!非常感谢你,普拉萨德。我不知道为什么我的环境没有识别系统变量,但现在这并不重要。我很高兴我的观点能奏效。再次感谢你!:)
// The aggregation pipeline
> var pipeline = [ {
$match: {
$expr: {
$gte: [ "$created", { $subtract: [ "$$NOW", 31536000000 ] } ]
}
}
} ]
// Create view, using the above pipeline
> db.createView(
"coll_year_view",
"coll",
pipeline
)
// Query the view
> db.coll_year_view.find()