将功能代码映射为CouchDB上的过滤器复制器

时间:2017-08-07 16:23:16

标签: javascript android couchdb couchbase-lite

我在Android上使用CouchBase Lite和CouchBase Lite。我想在我的设备上复制数据库,因为我想使用the filtered replication

当我在Futon上运行它时,我的编写和脚本完美无缺,并且显示了我写的所有文件。

我的问题是,如果我使用代码作为过滤器它在我的移动设备上不起作用,而且我没有得到我需要的文件的文件。

这是在Futon上运行良好的功能(对不起滚动)

function(doc) {
if (doc.ismaster != true && 
    (Math.ceil((new Date(Date.now()).getTime() - new Date(doc.creation_date.split('/')[2], doc.creation_date.split('/')[1] - 1, doc.creation_date.split('/')[0]).getTime()) / (1000 * 3600 * 24)) <=360) && 
    ((((doc.type=='field_order') && (Math.ceil((new Date(Date.now()).getTime() - new Date(doc.creation_date.split('/')[2], doc.creation_date.split('/')[1] - 1, doc.creation_date.split('/')[0]).getTime()) / (1000 * 3600 * 24)) <=10))) ||
     (((doc.type=='consumption_report') && (Math.ceil((new Date(Date.now()).getTime() - new Date(doc.creation_date.split('/')[2], doc.creation_date.split('/')[1] - 1, doc.creation_date.split('/')[0]).getTime()) / (1000 * 3600 * 24)) <=10))) ||
     (((doc.type=='production_order') && (Math.ceil((new Date(Date.now()).getTime() - new Date(doc.creation_date.split('/')[2], doc.creation_date.split('/')[1] - 1, doc.creation_date.split('/')[0]).getTime()) / (1000 * 3600 * 24))<=10))) ||
     (((doc.type=='work_report') && (Math.ceil((new Date(Date.now()).getTime() - new Date(doc.creation_date.split('/')[2], doc.creation_date.split('/')[1] - 1, doc.creation_date.split('/')[0]).getTime()) / (1000 * 3600 * 24)) <=40))) ||
     (((doc.type=='pallet') && (Math.ceil((new Date(Date.now()).getTime() - new Date(doc.creation_date.split('/')[2], doc.creation_date.split('/')[1] - 1, doc.creation_date.split('/')[0]).getTime()) / (1000 * 3600 * 24)) <=10))) ||
     (((doc.type=='shipment') && (Math.ceil((new Date(Date.now()).getTime() - new Date(doc.creation_date.split('/')[2], doc.creation_date.split('/')[1] - 1, doc.creation_date.split('/')[0]).getTime()) / (1000 * 3600 * 24)) <=10))) || 
     (((doc.type=='sowing_report') && (Math.ceil((new Date(Date.now()).getTime() - new Date(doc.creation_date.split('/')[2], doc.creation_date.split('/')[1] - 1, doc.creation_date.split('/')[0]).getTime()) / (1000 * 3600 * 24)) <=10))))){  
    emit([doc.type], doc);
}

}

这是复制过滤器,不能使用相同的代码:

 "filters": {
     "666": "function(doc, req) {
     if (doc.ismaster != true &&
         (Math.ceil((new Date(Date.now()).getTime() - new Date(doc.creation_date.split('/')[2], doc.creation_date.split('/')[1] - 1, doc.creation_date.split('/')[0]).getTime()) / (1000 * 3600 * 24)) <=360) &&
         ((((doc.type=='field_order') && (Math.ceil((new Date(Date.now()).getTime() - new Date(doc.creation_date.split('/')[2], doc.creation_date.split('/')[1] - 1, doc.creation_date.split('/')[0]).getTime()) / (1000 * 3600 * 24)) <=10))) ||
          (((doc.type=='consumption_report') && (Math.ceil((new Date(Date.now()).getTime() - new Date(doc.creation_date.split('/')[2], doc.creation_date.split('/')[1] - 1, doc.creation_date.split('/')[0]).getTime()) / (1000 * 3600 * 24)) <=10))) ||
          (((doc.type=='production_order') && (Math.ceil((new Date(Date.now()).getTime() - new Date(doc.creation_date.split('/')[2], doc.creation_date.split('/')[1] - 1, doc.creation_date.split('/')[0]).getTime()) / (1000 * 3600 * 24))<=10))) ||
          (((doc.type=='work_report') && (Math.ceil((new Date(Date.now()).getTime() - new Date(doc.creation_date.split('/')[2], doc.creation_date.split('/')[1] - 1, doc.creation_date.split('/')[0]).getTime()) / (1000 * 3600 * 24)) <=40))) ||
          (((doc.type=='pallet') && (Math.ceil((new Date(Date.now()).getTime() - new Date(doc.creation_date.split('/')[2], doc.creation_date.split('/')[1] - 1, doc.creation_date.split('/')[0]).getTime()) / (1000 * 3600 * 24)) <=10))) ||
          (((doc.type=='shipment') && (Math.ceil((new Date(Date.now()).getTime() - new Date(doc.creation_date.split('/')[2], doc.creation_date.split('/')[1] - 1, doc.creation_date.split('/')[0]).getTime()) / (1000 * 3600 * 24)) <=10))) ||
          (((doc.type=='sowing_report') && (Math.ceil((new Date(Date.now()).getTime() - new Date(doc.creation_date.split('/')[2], doc.creation_date.split('/')[1] - 1, doc.creation_date.split('/')[0]).getTime()) / (1000 * 3600 * 24)) <=10))))) 
     return true;}",

我做错了什么?

1 个答案:

答案 0 :(得分:0)

Couchbase Lite目前不支持CouchDB过滤器。这是一个复杂的问题。有关详情,请参阅this documentationthis GitHub issue