我在使用Ektorp executeBulk&amp ;;的Cloudant DB(CouchDB)中的文档列表上面临批量更新问题。 ExecuteAllOrNothing函数。
对于couchDbConnector.executeAllOrNothing(List<?> list)
,我收到如下错误:
org.ektorp.DbAccessException: 417:Expectation Failed
URI: /let-ut-app/_bulk_docs
Response Body:
null
at org.ektorp.http.StdResponseHandler.createDbAccessException(StdResponseHandler.java:44)
at org.ektorp.http.StdResponseHandler.error(StdResponseHandler.java:62)
at org.ektorp.http.RestTemplate.handleResponse(RestTemplate.java:98)
at org.ektorp.http.RestTemplate.post(RestTemplate.java:61)
at org.ektorp.impl.StdCouchDbConnector.executeBulk(StdCouchDbConnector.java:536)
at org.ektorp.impl.StdCouchDbConnector.executeAllOrNothing(StdCouchDbConnector.java:494)
如果我更改相同的逻辑以使用executeBulk
couchDbConnector.executeBulk(List<?> list)
错误消息如下所示:
org.ektorp.DbAccessException: 500:Internal Server Error
URI: /let-ut-app/_bulk_docs
Response Body:
{
"error" : "case_clause",
"reason" : "{12,11}",
"stack" : [ "fabric_doc_update:handle_message/3", "rexi_utils:process_mailbox/6", "rexi_utils:recv/6", "fabric_doc_update:go/3", "fabric:update_docs/3", "chttpd_db:db_req/2", "chttpd:handle_request/1", "mochiweb_http:headers/5" ]
}
at org.ektorp.http.StdResponseHandler.createDbAccessException(StdResponseHandler.java:44)
at org.ektorp.http.StdResponseHandler.error(StdResponseHandler.java:62)
at org.ektorp.http.RestTemplate.handleResponse(RestTemplate.java:98)
at org.ektorp.http.RestTemplate.post(RestTemplate.java:61)
at org.ektorp.impl.StdCouchDbConnector.executeBulk(StdCouchDbConnector.java:536)
at org.ektorp.impl.StdCouchDbConnector.executeBulk(StdCouchDbConnector.java:498)
如果你们中的任何人遇到过这个问题以及你们是如何解决它的,请告诉我。
感谢您的帮助。
Thanx很多!
答案 0 :(得分:0)
我看到与cloudant服务器类似。我使用rest client直接拨打电话:
不幸的是,此代码段不处理批量保存的2个选项(uuids和all或none)。您可以查看沙发代码并自行实现(但我还没有这样做)。
# this couchrest will throw an exception on some couchdb servers
# db.bulk_save(design_docs, false, true) # no uuids, all or nothing
bulk_docs = {'docs' => design_docs}
responses = CouchRest.post("#{db.root}/_bulk_docs", bulk_docs)