自动更新Mongo DB中的集合

时间:2016-06-23 18:37:42

标签: mongodb mongodb-query

所以我试图在Mongo dB中创建一个类似SQL的视图。因为我知道这不能直接实现,所以我创建了一个聚合函数。这个复杂的聚合函数正是我需要做的,并在新集合中加载值。

db.User.aggregate([
    {$limit:5}
     {$lookup: {
    from: "Interactions", 
    localField: "_id",
    foreignField: "userId",
    as: "InteractionsView"}
      },
  {$project: {

      "userCount": "$User.Count",
      .
      .
      . 
      . //(All fields i need are added here)

     "InteractionsView.Pages" : {
  $filter: {
         input: "$InteractionsView.Pages",
         as: "num",
         cond: { $gte: [ "$$num.Datetime", new Date("2015-06-14T20:15:31Z")] }
    }
  }
}},
{$out:"ReportView"}

])

  db.ReportView.find({});

这很好,查询工作..现在,因为我不能使用视图,我试图经常更新此集合,以便我可以作为一个视图。是否有任何选项,如我可以配置为每10分钟运行一次的调度程序,或者是否有任何新的开箱即用选项可用?或者我完全错了吗?

2 个答案:

答案 0 :(得分:0)

虽然mongodb中没有内置的调度任务支持。见job scheduling in mongodb?

但是,您可以使用操作系统级别支持(对于Linux中的Cronjobs)来安排任务。

答案 1 :(得分:0)

恕我直言,将文化商店的关系思维投射到一起是个坏主意。

如果您提供的查询限制为5个文档并且执行时间可以接受,那么我建议使用像redis这样的缓存服务器将结果存储为TTL设置为5分钟的键值形状,或者只是创建缓存对象在服务器上。

在最简单的形式中,您可以为每个请求执行相同的查询,并利用数据库引擎提供的缓存机制。

考虑性能创建新集合总是磁盘密集,重用内存结果将更快,更顺畅。

Aby评论欢迎!