是否可以在CouchDB中使用类似的查询?喜欢用两个键?CouchDB和多个键
SELECT field FROM table WHERE value1="key1" OR value2="key2"
我总是只用一个键。
function(doc) {
emit(doc.title, doc);
}
谢谢。
是否可以在CouchDB中使用类似的查询?喜欢用两个键?CouchDB和多个键
SELECT field FROM table WHERE value1="key1" OR value2="key2"
我总是只用一个键。
function(doc) {
emit(doc.title, doc);
}
谢谢。
是的。如果我理解你的问题,像这样的应该做的伎俩:
function(doc) {
a = (doc.value1 && doc.value1 == "key1");
b = (doc.value2 && doc.value2 == "key2");
if (a || b) {
emit(doc._id,doc.title);
}
}
只发出你需要的文件或值。
在CouchDB中0.9和上面可以张贴到视图(或_all_docs)与身体像:
{"keys": ["key1", "key2", ...]}
为了检索该组与匹配键的行的。
这不回答这个问题。一旦你找到了你想要的文件,这只是得到文件。诀窍是搞清楚你想要的文件清单。 – 2011-11-16 18:09:27
你能做到这一点DOC值(假设你要“动态参数“)通过使用2个单独的视图和一个小小的客户端处理:
您将有一个视图”field1“,您将查询”value1“。 (获取文档ID列表)
然后,您查询“field2”上的第二个视图,传递“value2”,并获取Doc ID的另一个列表。现在
,你只需要找到该ID号 的2所列出的“交叉点”(作为练习留给读者)
它只是不适用于大量的数据。交集是O(n log n),它会使客户窒息足够的结果 – Andrea 2012-05-31 08:15:03
您可以创建这样一个观点:
function(doc){
if(doc.value1) emit(doc.value1, doc.field);
if(doc.value2) emit(doc.value2, doc.field);
}
然后使用llasram的建议发布到与视图查询它:
{"keys": ["key1", "key2", ...]}
您的客户将不得不警惕了DUP虽然。 doc.value1 ==“key1”& & doc.value2 ==“key2”的文档将显示两次。只需使用_id来过滤结果。
一个需要扩大一点llasram的答案;该指数必须包含值这两个领域:
function(doc) {
emit("value1:"+doc.value1); // add check for undefined, null, etc.
emit("value2:"+doc.value2);
}
然后用
keys=["value1:key1","value2:key2"]
编辑查询:这将同一文件多次举报但如果它包含的匹配值+密钥对。
嗯,当然,如果你事先知道“key1”和“key2”,但是如果你想让他们成为“动态”参数呢? – 2011-11-16 18:01:39