【问题标题】:How do you delete a couchdb document with an empty "" document id?如何删除带有空“”文档ID的couchdb文档?
【发布时间】:2018-07-05 09:01:55
【问题描述】:

我在数据库中看到的文档是这样的: {_id: "", _rev: "1-2f11e026763c10730d8b19ba5dce7565", 禁止: "必须提供最新的 _rev 才能更新现有包"}

我在文档中看到的所有内容都显示引用了带有 ID 的文档,但这当然不会发生。

我不确定这是怎么发生的,很可能是椅子和键盘之间有问题,但我想知道是否有可能在不重新开始的情况下解决这个问题。

【问题讨论】:

    标签: couchdb document


    【解决方案1】:

    CouchDB 中存在允许这种情况发生的错误。我相信它是在 v1.1.0 中引入的,并将在 v1.1.1 和 v1.2.0 中修复。

    错误在于_update 函数可以创建具有空字符串 ID 的文档。要删除文档,请使用相同的更新功能并利用相同的错误。

    例如:

    { "_id": "_design/example",
      "updates": {
        "del_blank":
        "function(doc, req) {
           var doc = {_id:'', _rev:req.query.rev, _deleted:true};
           return [doc, 'Trying to delete nastydoc@'+doc._rev];
         }"
       }
    }
    

    只需提供给您带来问题的修订版,它就会将其标记为已删除。

    $ rev="1-2f11e026763c10730d8b19ba5dce7565"
    $ curl -XPOST localhost:5984/db/_design/example/_update/del_blank?rev=$rev
    Trying to delete nastydoc@1-2f11e026763c10730d8b19ba5dce7565
    
    $ curl localhost:5984/db/_all_docs
    {"total_rows":1,"offset":0,"rows":[
    {"id":"_design/example","key":"_design/test","value":{"rev":"2-b9bfbedff0c09fab88ff36d06cec0d34"}},
    ]}
    

    【讨论】:

      【解决方案2】:

      关于 2.1.1 版:

      Fauxton 项目中存在一个错误,它允许您在将新 ID 留空的情况下克隆文档。 Project Fauxton 和 CouchDB 的 API 都没有提供编辑或删除具有空白 ID 的文档的方法。

      JasonSmith's answer 中,del_blank 更新函数抛出{"error":"illegal_docid","reason":"Document id must not be empty"}。因此,您必须将数据库复制到一个新数据库中,该数据库将存储具有非空 ID 的文档。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-03
        • 1970-01-01
        • 2016-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多