Cloudant:在多个级别进行过滤和聚合
Cloudant: Filtering and aggregation at multiple levels
我在 cloudant 中有一个文档集
{
"id" : String
"state": String
"city": String
"zipcode": int
"productType": String
"make": String
"model": String
"sku": String
"usedOn": Date
"energyUSed": int
"durationUsed": int
}
我想根据多个条件进行过滤 - 州、城市、邮政编码、制造商、型号、sku 等,并汇总 energyUsed 和 durationUsed
我查看了使用 map/reduce、查询索引和 _find 目标查询 cloudant。但是,其中 none 足够灵活,可以在多个级别进行过滤和聚合。
例如,我想根据品牌和型号进行过滤,然后在州或城市级别进行汇总。在另一种情况下,我想根据州、城市、品牌和型号进行过滤,并在月份级别进行汇总(使用 usedOn)。
非常感谢任何帮助。
您可以通过定义正确的视图(map/reduce 函数)实现很多目标。
假设您要查找使用的能源并通过制作模型过滤并在州或城市聚合,您可以定义以下地图:
var makeModelKey = doc.make + '_' + doc.model;
emit([makeModelKey, doc.state, doc.city], doc.energyUsed);
reduce 函数只是内置的 _sum
函数。
现在按特定品牌和型号查询并调整减少的组级别,您将能够获得每个 make_model 使用的能源,然后按州拆分,然后按城市进一步拆分。
如果您只想按州和城市分组,只需定义一个不带键的 make_model 部分的不同视图。
你不能用一个视图来实现所有,couch dB 不是 RDB。你需要一种不同的方法。
您的其他查询可能需要定义略有不同的 map/reduce 函数,但所有这些都是可以实现的。
一开始对我来说很难的一件事是打破 'relational' 的思维方式 - 从 SQL 世界切换到 doc dbs 和 map/reduce 世界需要一个不同的数据和查询建模方法。
我在 cloudant 中有一个文档集
{
"id" : String
"state": String
"city": String
"zipcode": int
"productType": String
"make": String
"model": String
"sku": String
"usedOn": Date
"energyUSed": int
"durationUsed": int
}
我想根据多个条件进行过滤 - 州、城市、邮政编码、制造商、型号、sku 等,并汇总 energyUsed 和 durationUsed
我查看了使用 map/reduce、查询索引和 _find 目标查询 cloudant。但是,其中 none 足够灵活,可以在多个级别进行过滤和聚合。
例如,我想根据品牌和型号进行过滤,然后在州或城市级别进行汇总。在另一种情况下,我想根据州、城市、品牌和型号进行过滤,并在月份级别进行汇总(使用 usedOn)。
非常感谢任何帮助。
您可以通过定义正确的视图(map/reduce 函数)实现很多目标。
假设您要查找使用的能源并通过制作模型过滤并在州或城市聚合,您可以定义以下地图:
var makeModelKey = doc.make + '_' + doc.model;
emit([makeModelKey, doc.state, doc.city], doc.energyUsed);
reduce 函数只是内置的 _sum
函数。
现在按特定品牌和型号查询并调整减少的组级别,您将能够获得每个 make_model 使用的能源,然后按州拆分,然后按城市进一步拆分。
如果您只想按州和城市分组,只需定义一个不带键的 make_model 部分的不同视图。
你不能用一个视图来实现所有,couch dB 不是 RDB。你需要一种不同的方法。
您的其他查询可能需要定义略有不同的 map/reduce 函数,但所有这些都是可以实现的。
一开始对我来说很难的一件事是打破 'relational' 的思维方式 - 从 SQL 世界切换到 doc dbs 和 map/reduce 世界需要一个不同的数据和查询建模方法。