在CouchDB的许多文档中需要更改_ID时,最佳路径是什么?

时间:2012-01-28 07:39:48

标签: couchdb

CouchDB 1.1,Windows。
我从这个结构重组了我的数据库(例子)

{
    "_id": "0 rock-inorganic 2 m m 10 -50 30 a",
    "inner-coord": [50, 90, 20],
    "map": ...
    ...
}

到此

{
    "_id": "0 2 rock-inorganic 10 -50 30 a",
    "inner-coord": [50, 90, 20],
    "map": ...
    ...
}

请建议为文档重命名'_id'的简单路径(单/多):被褥不允许。

1 个答案:

答案 0 :(得分:1)

将以下视图保存在设计文档中:

图:

function (doc) {
  function isOldDoc() {
    // IT'S AN EXAMPLE: CHANGE IT TO FIT YOUR NEEDS
    return doc._id.match(/^\d \w+ \d \w \w \d+ -?\d+ \d+ \w$/);
  }

  if (isOldDoc()) {
    emit(doc._id, 1);
  }
}

这将返回您需要处理的所有文档。

编写脚本以使用include_docs=true查询视图,并为每行执行:

  • 使用新的_id
  • 保存文档
  • 删除旧文件。

或者,您可以查询_all_docs,对于旧格式的每个row.id,请执行COPY并将Destination设置为新的_id通过旧_id的{​​{3}}。