CouchDB视图映射函数,不隔离reduce键

CouchDB视图映射函数,不隔离reduce键,couchdb,mapreduce,Couchdb,Mapreduce,以下是文档架构: 有很多这样的文件,在过去和未来都有很多有效日期,而且在同一个月内有很多次两到三个报价。我找不到一个方法来表达以下观点:给定一个日期,给我一个产品列表和该日期的运行报价 我想我需要发出valid_date字段,以便将查询的endkey设置为给定的日期,然后我需要减少该字段的最大值,这意味着我不能发出它 我弄错了吗?我对map/reduce概念完全陌生。有什么建议吗?我真的被你关于想要减少的评论所折服,根据你的要求,你只想要一个映射函数,而不是减少。以下是基于您要求的映射功能: f

以下是文档架构:

有很多这样的文件,在过去和未来都有很多有效日期,而且在同一个月内有很多次两到三个报价。我找不到一个方法来表达以下观点:给定一个日期,给我一个产品列表和该日期的运行报价

我想我需要发出valid_date字段,以便将查询的endkey设置为给定的日期,然后我需要减少该字段的最大值,这意味着我不能发出它


我弄错了吗?我对map/reduce概念完全陌生。有什么建议吗?

我真的被你关于想要减少的评论所折服,根据你的要求,你只想要一个映射函数,而不是减少。以下是基于您要求的映射功能:

function(d) {
  if( d.type === 'offer' ) {
    var dd = d.valid_from;

    dd[1] = ( '0' + ( dd[1] + 1 )).slice(-2);   // remove the +1 if 7 is July not August
    dd[2] = ( '0' + dd[2] ).slice(-2);

    emit( dd.slice(0,3).join('-') );
  }
}
然后,要显示给定日期内有效的所有优惠,您可以使用以下参数查询此视图:

endkey="2012-08-01"&include_docs=true

我真的被你关于想要减少的评论所折服,基于你的需求,你想要的只是一个映射函数,而不是减少。以下是基于您要求的映射功能:

function(d) {
  if( d.type === 'offer' ) {
    var dd = d.valid_from;

    dd[1] = ( '0' + ( dd[1] + 1 )).slice(-2);   // remove the +1 if 7 is July not August
    dd[2] = ( '0' + dd[2] ).slice(-2);

    emit( dd.slice(0,3).join('-') );
  }
}
然后,要显示给定日期内有效的所有优惠,您可以使用以下参数查询此视图:

endkey="2012-08-01"&include_docs=true

为什么不在日期字段中使用时间戳?对于射程开始键和结束键来说都是非常直接的。是的,我可以。我没有强烈的意见,我只是觉得这样会更容易操纵它。但我认为这并没有改变我的问题。为什么不在日期字段中使用时间戳呢?对于射程开始键和结束键来说都是非常直接的。是的,我可以。我没有强烈的意见,我只是觉得这样会更容易操纵它。但我认为这并没有改变我的问题。到目前为止一切都很好,但现在我如何才能得到连续的报价呢?正在运行的报价是给定范围内具有最大有效_的文档。为了简单起见,假设我只保留月数为有效值。假设我有2个产品,每个产品有3个报价,我想找到特定月份范围内每个产品的最新报价。如果我发出[month,product],则地图将按月份排序,这意味着我不能通过返回maxvalues.month来减少。如果我发出[产品,月],那么我就不能在月进行范围查询。好的,这还不清楚。只需选择返回内容中的最后一行。如果您有很多记录,请从查询中删除include_docs=true,这样您就可以从最后一行获取ID,然后重新查询该文档。目前为止还不错,但现在我如何才能获得正在运行的报价?正在运行的报价是给定范围内具有最大有效_的文档。为了简单起见,假设我只保留月数为有效值。假设我有2个产品,每个产品有3个报价,我想找到特定月份范围内每个产品的最新报价。如果我发出[month,product],则地图将按月份排序,这意味着我不能通过返回maxvalues.month来减少。如果我发出[产品,月],那么我就不能在月进行范围查询。好的,这还不清楚。只需选择返回内容中的最后一行。如果您有很多记录,请从查询中删除include_docs=true,这样您就可以从最后一行获取ID,然后重新查询该文档。