在CouchDB中执行WHERE-IN查询

joh*_*wie 8 sql database couchdb where-in

我想通过一次调用CouchDB来查询特定文档的列表.

使用SQL我会做类似的事情

SELECT *
FROM database.table
WHERE database.table.id
IN (2,4,56);
Run Code Online (Sandbox Code Playgroud)

什么是在CouchDB中通过_id其他字段或其他字段执行此操作的方法?

Kxe*_*pal 7

您需要使用视图keys 查询参数来获取具有指定集合中的键的记录.

function(doc){
    emit(doc.table.id, null);
}
Run Code Online (Sandbox Code Playgroud)

然后

GET /db/_design/ddoc_name/_view/by_table_id?keys=[2,4,56]
Run Code Online (Sandbox Code Playgroud)

要同时检索文档内容,只需在include_docs=True查询中添加查询参数即可.

UPD:您可能有兴趣通过此参考ID检索文档(2,4,56).默认情况下,CouchDB使用它们所属的文档查看"映射"发出的密钥.要调整此行为,您可以使用链接文档技巧:

function(doc){
    emit(doc.table.id, {'_id': doc.table.id});
}
Run Code Online (Sandbox Code Playgroud)

现在请求

GET /db/_design/ddoc_name/_view/by_table_id?keys=[2,4,56]&include_docs=True
Run Code Online (Sandbox Code Playgroud)

将返回包含id指向包含文档的字段的行2,4以及包含引用文档内容的56键和键doc.