Date State | City | Zip | Water | Weight
-------------------------------------------------------------------
01/01/2016 Arizona Chandler 1011 10 ltr 40 kg
01/04/2016 Arizona Mesa 1012 20 ltr 50 kg
06/05/2015 Washington Spokane 1013 30 ltrs 44 kg
06/08/2015 Washington Spokane 1013 30 ltrs 44 kg
我想要的是复杂的查询,比如我想知道平均水量,通过城市或州或者ip传递日期范围或月份的权重,或任何字段或所有字段。
我不知道该如何解决这个问题。阅读有关map reduce的内容,但无法猜测我将如何获得高于输出
如果您的示例链接涵盖了上述方案,这也会有所帮助。
提前致谢
答案 0 :(得分:1)
首先,我们需要使用JSON对结构化数据进行建模。像这样的东西会起作用:
{
"date": "2016-01-01",
"location": "Arizona Chandler",
"pressure": 1101,
"water": 10,
"weight": 40
}
以下是您在Cloudant数据库中的数据:
https://reader.cloudant.com/so37613808/_all_docs?include_docs=true
接下来,我们需要创建一个MapReduce视图,以按日期聚合特定字段。用于创建索引的map函数,其键是日期,其值为water
,如下所示:
function(doc) {
emit(doc.date, doc.water);
}
从map函数发出的每个键/值对都会添加到索引中,该索引可以在以后完整查询,也可以通过一系列键(在这种情况下表示日期的键)进行查询。
如果需要平均值,我们将使用内置的_stats
减速器。 Map和Reduce部分在设计文档中表达,如下所示:https://reader.cloudant.com/so37613808/_design/aggregate
后续索引允许我们在整个数据集中获得聚合:
https://reader.cloudant.com/so37613808/_design/aggregate/_view/waterbydate
将sum
除以count
给出了平均值。
我们也可以使用相同的索引来提供按键分组的数据:
https://reader.cloudant.com/so37613808/_design/aggregate/_view/waterbydate?group=true
或者我们可以通过提供startkey
和endkey
参数来选择部分数据: