我使用Map函数创建视图:
r = r.replace("true", "True")
我想用多键过滤数据:
r = r.replace("True", "true")
但我仍然得到:
function(doc) {
if (doc.market == "m_warehouse") {
emit([doc.logTime,doc.dbName,doc.tableName], 1);
}
}
键_design/select_data/_view/new-view/?limit=10&skip=0&include_docs=false&reduce=false&descending=true&startkey=["2018-06-19T09:16:47,527","stage"]&endkey=["2018-06-19T09:16:43,717","stage"]
不应出现在结果中。
我做错了什么?
答案 0 :(得分:0)
您的查询是 not 多键.. ist的开始和结束键。 如果要在特定时间范围内按dbname获得结果,则需要将发射更改为[doc.dbName,doc.logTime,doc.tableName]
然后您查询startkey = [“ stage”,“ 2018-06-19T09:16:43,717”]&endkey = [“ stage”,“ 2018-06-19T09:16:47,527”]
(顺便说一句,您确定时间戳正确吗?在您的示例中,第二个TS大于第一个。)
答案 1 :(得分:0)
由于您已经选择了完整的日期/时间戳作为密钥的第一级(精确到毫秒),因此复合密钥的第一级中不可能有重复的值。如果仅索引日期,例如,作为第一个键,则日期将以更可预测的方式按日期,dbame和表名分组
例如
["2018-06-19","ods","o_ad_dsp_pvlog_realtime"]
["2018-06-19","stage","s_ad_ztc_realpv_base_indirect"]
["2018-06-19",stage","s_ad_ztc_realpv_base_indirect"
["2018-06-19","stage","s_ad_ztc_realpv_base_indirect"
使用此键结构,键的分层分组会为您所用,即来自“ 2018-06-19”的所有数据都在索引中,并且所有数据都匹配[“ 2018-06-19”,”阶段”]彼此相邻。
如果需要达到毫秒精度,则可以按以下方式索引数据:
function(doc) {
if (doc.market == "m_warehouse") {
emit([doc.dbName,doc.logTime], 1);
}
}
这将创建由dbName
组织的索引,但按时间进行次要排序。然后,您可以在两个时间戳之间提取指定dbName
的数据。