2016-07-01 46 views
2

我正在做一个网站来探索mongoDB数据。在我的数据库中,我存储了从智能手机捕获的GPS测量。我正在使用各种查询来探索这些测量。我有一个查询按天计算并计算测量结果。另一个查询计算每种智能手机(iOS,Android)的测量次数。等..

所有这些查询在其聚合管道中共享相同的$匹配参数。在这条管道中,我过滤测量值,以便在时间间隔和地理区域内进行关注。

有没有办法让数据库不需要每次都应用这个过滤器的方式来保存缓存中$匹配的子集?

我想优化我的查询的响应时间。

一个查询的示例:

cursor = db.myCollection.aggregate(
    [ 
    { 
     "$match": 
     { 
      "$and": [{"t": {"$gt": tMin, "$lt": tMax}, "location":{"$geoWithin":{"$geometry":square}}}] 
     } 
    }, 
    { 
     "$group": 
     { 
      "_id": {"hourGroup": "$tHour"}, 
      "count": {"$sum": 1} 
     } 
    } 
    ] 
) 

我想在缓存中保持这样的结果:

"$match": 
    { 
     "$and": [{"t": {"$gt": tMin, "$lt": tMax}, "location":{"$geoWithin":{"$geometry":square}}}] 
    } 
+0

我不明白该怎么做。 – SwissFr

回答

1

你可以做到这一点是创建使用$out一个新的集合的方式管道阶段。

然后,您将使用查询批处理,第一个查询将创建一个匹配的输出,然后可以使用它的结果。

还有就是在开发一个新的流水线阶段称为$facet,我们将能够执行匹配,然后在多个聚合路径中使用这个结果(计划是有它在蒙戈3.4就绪)

任何意见欢迎!

+0

我的数据集非常大。从存储角度来看,新集合的创建可能存在问题。 $ facet可能会在未来解决它,但我现在需要一个替代方案。 – SwissFr

相关问题