是否可以在CouchDB中使用类似的查询?比如使用两个键?
SELECT field FROM table WHERE value1="key1" OR value2="key2"
我一直只使用一把钥匙。
function(doc) {
emit(doc.title, doc);
}
谢谢。
答案 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)
答案 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号列表的“交集” (留给读者练习)