/{db}/_all_docs 响应中的 id 和 key 字段有什么区别?

问题描述

/{db}/_all_docs 响应似乎具有相同的 idkey 值。两者有什么区别? key 字段未在任何地方记录。

解决方法

乍一看 idkey 似乎是多余的,但在考虑 _all_docs 时它是有道理的。来自文档:

执行内置的_all_docs view*,返回所有文档 在数据库中。除了 URL 参数(描述 下面),此端点与任何其他视图的工作方式相同。参考 查看端点文档以获得完整的描述 可用的查询参数和返回数据的格式。

* 强调我的

所以 _all_docs 是一个内置的视图。考虑view documentation。将视图视为由三个字段组成会很有帮助

  • id
  • 价值

用户设计的视图通常形成为 id = document._id with emit() 函数(通过 map 函数)生成的键和值。

例如下面的地图函数

function (doc) {
  emit(doc.someField,doc.someValue);
}

生成视图 id = doc._id,key = doc.someField,value = doc.someValue。