在cloudant文档中插入自定义_id时遇到错误?

时间:2017-01-11 06:46:18

标签: android database couchdb cloudant

当我没有设置_id我可以插入文档时,当我添加_id时,我收到错误:

Failed to create document java.util.concurrent.ExecutionException:
   com.cloudant.sync.datastore.InvalidDocumentException: Field name start
   with '_' is not allowed.

我的代码是:

private Map<String, String> temponload() {
    Map<String, String> userInfo = new HashMap<>();
    userInfo.put("_id", "org:HELLO"+str_email);
    userInfo.put("first_name", "FIRSTNAME");
    userInfo.put("last_name", "LASTNAME");

    return userInfo;
}
public Map<String, String> createDocument(Map<String, String> map) {
    DocumentRevision rev = new DocumentRevision();
    rev.setBody(DocumentBodyFactory.create(map));
    try {
        DocumentRevision created = sunDatastore.createDocumentFromRevision(rev);
        return map;
    } catch (DocumentException de) {
        return null;
    }
}

请帮我解决这个问题

2 个答案:

答案 0 :(得分:1)

CouchDB / Cloudant中的

_前缀字段是元数据字段。

在您正在使用的库中(sync-android on github),元数据字段通过DocumentRevision对象本身的getter进行访问,如果文档正文具有_前缀,则会拒绝该文档正文领域。

元数据字段是:

  • _id
  • _rev
  • _deleted

要设置文档的ID,必须根据Chris Snow的回答使用构造函数。如果没有为库设置文档的ID 生成该文档的ID,这就是为什么如果从文档正文中省略_id则成功保存的。

答案 1 :(得分:0)

您可以使用将Id传递给DocumentRevision的构造函数,即

DocumentRevision(java.lang.String id) 

来源http://www.javadoc.io/doc/com.cloudant/cloudant-sync-datastore-javase/1.1.5