如何查询发出复杂键的CouchDB视图?

如何查询发出复杂键的CouchDB视图?,couchdb,Couchdb,给定发出以下格式密钥的CouchDB视图: [ "part1", { "property": "part2" } ] 如何查找具有给定值的第1部分的所有文档 如果part2是一个简单的字符串而不是一个对象startkey=[“part1”]&endkey=[“part1”,{}]就可以工作了。缔约国声明如下: 查询startkey=[“foo”]&endkey=[“foo”,{}]将使大多数数组键与第一个元素中的“foo”匹配,例如[“foo”,“bar”]和[“foo”,[“bar”,“ba

给定发出以下格式密钥的CouchDB视图:

[ "part1", { "property": "part2" } ]
如何查找具有给定值的
第1部分的所有文档

如果
part2
是一个简单的字符串而不是一个对象
startkey=[“part1”]&endkey=[“part1”,{}]
就可以工作了。缔约国声明如下:

查询
startkey=[“foo”]&endkey=[“foo”,{}]
将使大多数数组键与第一个元素中的“foo”匹配,例如
[“foo”,“bar”]
[“foo”,[“bar”,“baz”]
。但是,它将不匹配
[“foo”,“an”:“object”}]


不幸的是,文档没有提供任何关于如何处理此类键的建议。

您的
endkey
值的第二个元素需要是一个对象,该对象在您的键的第二个元素的任何可能值之后进行整理。对象按属性逐属性进行比较(例如,
{“a”:1}
{“a”:2}
{“b”:1}
),因此最好的方法是将
结束键中的第一个属性名设置为非常大的值:

startkey=["part1"]&endkey=["part1", { "\uFFF0": false }]
\uFFF0
的属性名称应在第二个键元素中的任何其他属性名称之后进行排序,甚至在第二个元素为空对象或具有多个属性时也有效