我一直在阅读有关沙发数据库视图(http://wiki.apache.org/couchdb/HTTP_view_API#HTTP_View_API,http://www.barkingiguana.com/2009/01/22/filtering-and-ordering-couchdb-view-results/)的文档,但我找不到我要找的内容,而且我&# 39;我开始认为它不受支持。
我在沙发数据库中有两条记录
{
"_id": "UUID",
"_rev": "rev",
"status": "complete",
"csv": [
{
"Lower": 0.09,
"Upper": 0.31
}
],
"tags": {
"get_info": {
"duration": "24",
"location": "south"
}
}
}
和
{
"_id": "2-UUID",
"_rev": "2-rev",
"status": "complete",
"csv": [
{
"Lower": 0.01,
"Upper": 0.70
}
],
"tags": {
"different_info": {
"duration": "60",
"location": "south"
}
}
}
是否可以创建一个视图并添加查询参数,这些参数将返回所有具有标记" key":" value" (例如,我想要标记所有记录"持续时间":24或者我想要标记所有记录" location":" south")。我不想将任何键/值硬编码到视图中 - 它们应该与查询一起传递。
还有另一种思考方式吗?这不是一种观点吗?
答案 0 :(得分:1)
实现此目的的一种方法是使用[ key, value ]
将视图中的所有标记作为数组发出:
function (doc) {
for (var type in doc.tags) {
for (var tag in doc.tags[type]) {
emit([ tag, doc.tags[type][tag] ]);
}
}
}
您可以使用特定对查询您的视图:key=["duration","24"]
。您还可以使用startkey
和endkey
进行远程搜索。
如果您选择POST
,则可以指定密钥列表:keys[]=["duration","24"]&keys[]=["location","south"]
。但是,使用此方法,您将无法进行远程搜索。 (至少atm)
当查询这样的多个键时,您将获得与任何键匹配的所有文档,因此您可能需要在客户端对结果进行重复数据删除。
CouchDB视图更多地是关于计算和算法,而不是任意查询和搜索的最佳视图。为此,我强烈建议您添加搜索图层,例如couchdb-lucene或elasticsearch。