所以我试图在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分钟运行一次的调度程序,或者是否有任何新的开箱即用选项可用?或者我完全错了吗?
答案 0 :(得分:0)
虽然mongodb中没有内置的调度任务支持。见job scheduling in mongodb?
但是,您可以使用操作系统级别支持(对于Linux中的Cronjobs)来安排任务。
答案 1 :(得分:0)
恕我直言,将文化商店的关系思维投射到一起是个坏主意。
如果您提供的查询限制为5个文档并且执行时间可以接受,那么我建议使用像redis这样的缓存服务器将结果存储为TTL设置为5分钟的键值形状,或者只是创建缓存对象在服务器上。
在最简单的形式中,您可以为每个请求执行相同的查询,并利用数据库引擎提供的缓存机制。
考虑性能创建新集合总是磁盘密集,重用内存结果将更快,更顺畅。
Aby评论欢迎!