为什么CouchDB查看行使用“key”:key,“value”:value&不仅仅是关键:价值

时间:2010-08-05 09:48:09

标签: couchdb

为什么curl http://localhost:5984/blog/_design/comments/_view/total_num?group=true会返回

{"rows":[
  {"key":"sum","value":23},
]}

而不是

{"rows":[
  {"sum": 23},
]}

4 个答案:

答案 0 :(得分:4)

有几个不同的原因。

  • 正如Tim McNamara指出的那样,在结果行中将键作为成员名称意味着由于JSON规则,键仅限于字符串。这种方式允许人们拥有任何JSON类型的视图键。

  • 正如Alex Koshelev所指出的,如果我们在视图行中允许键作为对象成员名称,那么键和值将无法直接寻址。这意味着您必须调查每一行以确定密钥是什么。

  • 命名空间问题的第二个方面是密钥可能与该行中可能包含的任何元数据冲突。例如,include_docs = true或包含非缩减视图输出的docid成员。

或者,如果您想重新格式化输出以满足您的需要,可以使用_list函数根据自己的喜好更改每一行。

答案 1 :(得分:1)

除了亚历克斯和蒂姆的回应:

  • 视图的键可能不是唯一的,即可能为多个文档发出了相同的键,甚至为单个文档发出了多次。
  • 视图的行按键排序。 JSON的对象类型是“无序的名称/值对集”。许多语言(包括JavaScript)都没有定义映射中键的顺序。因此,列表可以更好地代表订单。

答案 2 :(得分:0)

允许将null个对象作为键。

答案 3 :(得分:0)

每行可以包含其他数据,例如doc次查询的文档数据(include_docs=true)。