使用CouchDB复合键,查找多条记录

Mat*_*att 5 database search couchdb composite-key nosql

我知道你可以传递一个键或一个范围来返回CouchDB中的记录,但我想做这样的事情.查找X值的X记录.

因此,例如,在常规的SQL,可以说,我想与那些ID返回记录5,7,29,102.我会做这样的事情:

SELECT * FROM sometable WHERE id = 5 OR id = 7 or id = 29 or id = 102
Run Code Online (Sandbox Code Playgroud)

是否可以在CouchDB中执行此操作,我将在键数组中找到所有要查找的值,然后CouchDB搜索"key parameter"中可能存在的所有记录?

Mar*_*cio 4

您可以按照 CouchDB wiki 上的记录执行 POST 。您在请求正文中传递键列表。

{"keys": ["key1", "key2", ...]}
Run Code Online (Sandbox Code Playgroud)

缺点是浏览器不会缓存 POST 请求。

或者,您可以使用带有参数的 GET 来获取相同的响应keys。例如,您可以_all_docs使用以下命令查询视图:

/DB/_all_docs?keys=["ID1","ID2"]&include_docs=true
Run Code Online (Sandbox Code Playgroud)

经过正确的 URL 编码后,将变为:

/DB/_all_docs?keys=%5B%22ID1%22,%22ID2%22%5D&include_docs=true
Run Code Online (Sandbox Code Playgroud)

这应该提供更好的可缓存性,但请记住_all_docs每次文档更新时都会发生变化。有时,您可以通过仅使用所需的文档定义自己的视图来解决此问题。