我在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。但是,这些都不够灵活,无法在多个级别进行过滤和聚合。
例如,我想根据品牌和型号进行过滤,并在州或市级进行汇总。在另一种情况下,我想根据州,城市,品牌和模型进行过滤,并在月级进行汇总(使用usedOn)。
非常感谢任何帮助。
答案 0 :(得分:0)
通过定义正确的视图(map / reduce函数),您可以实现很多目标。
假设您想要查找使用的能源并按州和城市的模型和汇总进行过滤,您可以定义以下地图:
var makeModelKey = doc.make + '_' + doc.model;
emit([makeModelKey, doc.state, doc.city], doc.energyUsed);
reduce函数只是内置的_sum
。
现在通过特定品牌和型号进行查询并调整组级别以进行缩减,您将能够获得每个make_model使用的能量,然后按州拆分,然后按城市进一步拆分。
如果您只想按州和城市进行分组,只需定义一个不带键的make_model部分的不同视图。
你不能有一个视图来实现所有,沙发dB不是RDB。你需要一个不同的方法。
您的其他查询可能需要定义稍微不同的map / reduce函数,但所有这些都是可以实现的。
最初对我来说困难的一件事是打破“关系”思维方式 - 从SQL世界转换为doc dbs和map / reduce world需要一种不同的数据和查询建模方法。