CouchDB和多个键

时间:2010-08-23 15:53:56

标签: couchdb

是否可以在CouchDB中使用类似的查询?比如使用两个键

SELECT field FROM table WHERE value1="key1" OR value2="key2"

我一直只使用一把钥匙。

function(doc) {

    emit(doc.title, doc);

}

谢谢。

6 个答案:

答案 0 :(得分:4)

在CouchDB 0.9及更高版本中,您可以使用如下的正文POST到视图(或_all_docs):

{"keys": ["key1", "key2", ...]}

为了检索具有匹配键的行集。

答案 1 :(得分:0)

是。如果我理解你的问题,这样的事情应该可以解决问题:

function(doc) {
  a = (doc.value1 && doc.value1 == "key1");
  b = (doc.value2 && doc.value2 == "key2");
  if (a || b) {
    emit(doc._id,doc.title);
  }
}

仅发出所需的文档或值。

答案 2 :(得分:0)

我将此添加到duluthian的回复中:

 emit(doc.title, null)

您始终可以使用view api.

提取“_id”和doc值

答案 3 :(得分:0)

你可以创建一个这样的视图:

function(doc){
    if(doc.value1) emit(doc.value1, doc.field);
    if(doc.value2) emit(doc.value2, doc.field);
}

然后使用llasram建议使用以下命令对视图进行查询:

{"keys": ["key1", "key2", ...]}

但是,您的客户必须警惕重复。 doc.value1 ==“key1”&& doc.value2 ==“key2”将出现两次。只需使用_id过滤结果即可。

答案 4 :(得分:0)

人们需要在llasram的答案上稍微扩展一下;索引必须包含两个字段的值:

function(doc) {
  emit("value1:"+doc.value1); // add check for undefined, null, etc.
  emit("value2:"+doc.value2);
}

然后用

查询
keys=["value1:key1","value2:key2"]

编辑:如果它包含匹配值+密钥对,则会多次报告同一文档。

答案 5 :(得分:-2)

您可以通过使用2个单独的视图和一些客户端处理来执行此操作(假设您需要“动态参数”):

你会在“field1”上有一个视图,你可以用“value1”查询。 (获取文档ID列表)

然后在“field2”上查询第二个视图,传递“value2”,并获取另一个Doc ID列表。

现在,您只需要找到2个ID号列表的“交集” (留给读者练习)