使用cloudant中的多个字段构建复杂查询

时间:2016-06-03 11:58:23

标签: cloudant

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的内容,但无法猜测我将如何获得高于输出

如果您的示例链接涵盖了上述方案,这也会有所帮助。

提前致谢

1 个答案:

答案 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

或者我们可以通过提供startkeyendkey参数来选择部分数据:

https://reader.cloudant.com/so37613808/_design/aggregate/_view/waterbydate?startkey=%222016-01-01%22&endkey=%222016-06-03%22

有关详细信息,请参阅https://docs.cloudant.com/creating_views.html