我在mongodb中有一个相当大的集合,包含约100,000个文档(未分片)。这是Web应用程序的后端,基本上允许用户以不同的方式浏览此集合中相同信息的视图。
对于其中一种视图,我尝试使用聚合框架计算字段出现次数。这意味着要对整个集合进行聚合。问题是,这个聚合操作(它是一组简单的管道:group、sort和limit)需要2秒钟,这对于Web应用程序来说太慢了。
所以我的问题是:为了缓存这个聚合操作的结果,什么是首选方案?据我所知,不可能“聚合到”一个新的集合中,或者类似于这样的东西。目前,我发现的唯一解决方案是将整个结果读入变量,然后使用insert将该变量插入到新集合中 - 但我担心这涉及将大量数据从数据库发送到我的应用程序,再发送回数据库。
有什么建议吗?
管道示例:
模式基本上是这三个字段加几个不太相关的字段,例如:
对于其中一种视图,我尝试使用聚合框架计算字段出现次数。这意味着要对整个集合进行聚合。问题是,这个聚合操作(它是一组简单的管道:group、sort和limit)需要2秒钟,这对于Web应用程序来说太慢了。
所以我的问题是:为了缓存这个聚合操作的结果,什么是首选方案?据我所知,不可能“聚合到”一个新的集合中,或者类似于这样的东西。目前,我发现的唯一解决方案是将整个结果读入变量,然后使用insert将该变量插入到新集合中 - 但我担心这涉及将大量数据从数据库发送到我的应用程序,再发送回数据库。
有什么建议吗?
管道示例:
res = items.aggregate([
{ "$group": { "_id": { "item_id": "$item_id", "title": "$title", "category": "$category" }, "count": { "$sum": 1 } } },
{ "$sort": { "count": -1 } },
{ "$limit": 5 }
])
模式基本上是这三个字段加几个不太相关的字段,例如:
doc = {
"item_id": 1000,
"title": "this is the item title",
"category": "this is the item category"
}
我已经尝试对item_id和所有3个字段创建索引,但都没有成功。