Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB视图中的公式_Mongodb_Aggregation Framework - Fatal编程技术网

MongoDB视图中的公式

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

我正在尝试创建一个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
是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()