在 couchdb 中查询地图 key/value 对
Querying on map key/value pair in couch db
我一直在阅读沙发数据库视图的文档 (http://wiki.apache.org/couchdb/HTTP_view_API#HTTP_View_API, http://www.barkingiguana.com/2009/01/22/filtering-and-ordering-couchdb-view-results/),但是我没有找到我要找的东西,我开始认为它不受支持。
我在 couch 数据库中有两条记录
{
"_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"
}
}
}
是否可以创建一个视图并添加查询参数,以 return 所有具有标签 "key":"value" 的记录(例如,我希望所有记录都标记为 "duration":24 或者我希望所有记录都标记为 "location":"south")。我不想将任何 key/values 硬编码到视图中 - 它们应该与查询一起传递。
是否有另一种不是视图的思考方式?
实现此目的的一种方法是使用 [ 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 or elasticsearch.
我一直在阅读沙发数据库视图的文档 (http://wiki.apache.org/couchdb/HTTP_view_API#HTTP_View_API, http://www.barkingiguana.com/2009/01/22/filtering-and-ordering-couchdb-view-results/),但是我没有找到我要找的东西,我开始认为它不受支持。
我在 couch 数据库中有两条记录
{
"_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"
}
}
}
是否可以创建一个视图并添加查询参数,以 return 所有具有标签 "key":"value" 的记录(例如,我希望所有记录都标记为 "duration":24 或者我希望所有记录都标记为 "location":"south")。我不想将任何 key/values 硬编码到视图中 - 它们应该与查询一起传递。
是否有另一种不是视图的思考方式?
实现此目的的一种方法是使用 [ 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 or elasticsearch.