0

我沒有設法從CouchDB中提取複製數據。Couchbase Lite從CouchDB中過濾複製

我正在使用CouchDB用於我的文檔存儲。

CouchDB的版本:的Apache CouchDB的1.6.1
Couchbase精簡版:Couchbase精簡版1.4.0

下面是我的樣本數據:

{ 
    "_id": "ab33deeb074523e3c63c216b8c2952a8", 
    "_rev": "6-e196bfb6aca85492e4f96f3af6fd1ee2", 
    "type": "employee", 
    "employee": { 
     "employeeId": "1", 
     "employeeName": "Test" 
    } 
} 

CouchDB的,我有創建了我自己的設計過濾器:

{ 
    "_id": "_design/employee", 
    "_rev": "35-00f59706402452291d30c3fb6e9a5356", 
    "filters": { 
     "byEmployeeId": "function(doc, req) { 
          if(doc.type != 'employee') { 
           return false; 
          } 

          if(doc.employee.employeeId == req.query.employeeId) { 
           return true; 
          } else { 
           return false; 
          } 
         }" 
    } 
} 

在另一方面,我使用Couchbase精簡版爲我的Android手機項目複製拉動員工數據:

Replication pull = this.getCouchbaseUtility().getDatabase().createPullReplication(
        new URL("http://localhost:5984/testdb") 
      ); 

      pull.setAuthenticator(authenticator); 
      pull.setContinuous(false); 

      pull.setFilter("employee/byEmployeeId"); 

      Map<String, Object> params = new HashMap<>(); 
      params.put("employeeId", "1"); 

      pull.setFilterParams(params); 

      pull.addChangeListener(new Replication.ChangeListener() { 
       @Override 
       public void changed(Replication.ChangeEvent event) { 
        System.out.println(event.getStatus()); 
       } 
      }); 

      pull.stop(); 
      pull.start(); 

應用程序沒有錯誤的運行,但沒有成功將數據複製到移動Couchbase存儲。

如果我將設計過濾器更改爲始終爲true,則應用程序可以從CouchDB複製員工文檔。難道是req.query.employeeId不兼容CouchbaseCouchDB

我可以知道我做錯了嗎?

+0

可能的重複:https://stackoverflow.com/questions/47220517/android-couchbase-lite-pull-with-filter-replication-setfilter –

回答

1

不幸的是,當後端是Couchbase服務器時,Couchbase lite只允許過濾拉複製。

當後端是CouchDB,Cloudant或其他任何東西時,您無法執行過濾複製。從CouchDB的,PouchDB或Cloudant

過濾拉由於Couchbase精簡版1.2,與非Couchbase數據庫拉複製過濾器功能不再可用。在POST/{db}/_ changes請求中處理filter參數的方式存在不兼容性(請參閱#1139)。

From Couchbase Lite docs

0

Couchbase,精簡版的過濾器不會從Couchbase除了任何其他服務器工作。同樣的原因是,在CouchDb中,REST調用是GET請求,而從1.2版本開始,Couchbase-lite已將請求轉換爲POST


一種方式可能是分叉存儲庫並進行更改ChangeTracker.java並更改usePOST布爾變量爲false,您會看到它開始工作。

但是,這是Couchbase從第2版中選擇並前進的路徑。0,對所有非Couchbase後端的支持將被完全刪除,因爲它們將完全從http移開。