使用startkey和end键在多个键中传递日期时,Couch DB返回空数组

时间:2018-03-29 02:36:56

标签: couchdb

我的查询是:

SELECT SUM(hrs) from Work WHERE EmployeeNumber =? AND EmployeeName=? AND WorkDate BETWEEN ? AND ?

我的沙发DB的关键

当我传递其他两个字符串,如员工编号和姓名时,我正在获取数据,但是当我添加日期时,我也得到空数组,但我看到这些日期有数据。

我尝试过将日期作为字符串发送,但没有结果。

  

?startkey = [“91444”,“Rick”,[2018,2,4]]& endkey = [“91444”,“Rick”,[2018,2,15]]

1 个答案:

答案 0 :(得分:0)

正如评论中所述,您的视图功能如下所示:

map: "function (doc) { 
    if (doc.EmployeeNumber && doc.EmployeeName && doc.workDate) { 
        var date = doc.workDate.split('-'); 
        var year = date[0]; 
        var mon = date[1]; if(mon.charAt( 0 ) == '0') { mon = mon.slice( 1 ); } 
        var day = date[2]; if(day.charAt( 0 ) == '0') { day = day.slice( 1 ); } 
        emit(doc.EmployeeNumber,doc.EmployeeName,[Number(year), Number(mon), Number(day)], doc.hrs); 
    } 
}", 
reduce: "_sum"

在你的地图功能中,你发出四件事:

emit(
    doc.EmployeeNumber,
    doc.EmployeeName,
    [Number(year), Number(mon), Number(day)], 
    doc.hrs
);

正如this documentation

中所述
  

emit()函数总是有两个参数:第一个是key,第二个是value

因此,您的地图功能看起来并不正确。