CouchDb如何最好地执行计数(不同)查询,其中有两个" select"参数

时间:2015-09-21 19:58:54

标签: count couchdb distinct

在couchdb数据库上执行以下操作的最佳方法是什么?

select count(distinct("some_field")) start_date_field>=date1end_date_field < date2;

start_date和end_date&#34;字段&#34;与数据库中的字段不同。

我应该使用清单吗?

1 个答案:

答案 0 :(得分:0)

我还没有对此进行测试,但这应该可以满足您的需求:

我假设你的文件看起来像这样:

{
  "_id": "41210a75550b2a3d0daf6c1369fbd9e9",
  "_rev": "4-d2328d2aa75933bdba905f2d41361b87",
  "some_field": "abc12345",
  "start_date": "2015-01-02",
  "end_date": "2015-01-03"
}

您可以编写一个如下所示的map reduce函数:

function (doc) {
  if (doc.start_date && doc.end_date && doc.some_field) {
     emit([doc.start_date, doc.end_date, doc.some_field], 1);
  }
}

您可以使用以下参数查询map reduce:

  • inclusive_end=true
  • start_key=["2015-01-01", "\u0000", "abc12345"]
  • end_key=["\ufff0", "2015-01-02", "abc12345"]&lt; - 结束日期减1
  • reduce=true
  • group=true

\u0000\ufff0代表一些低和高的unicode值。