如何在CouchDB 1.7.1_5中通过命令行使用_find查询指定产品?
解决CouchDB 1.7.1查询Apple产品的问题
嘿,先给你划个关键知识点:你用的CouchDB 1.7.1_5是不支持_find API的——这个接口是CouchDB 2.0及以后版本才推出的,所以你照着2.x的文档自然找不到正确用法!下面给你两种可行方案,适配你的当前版本和未来升级需求:
方案一:针对CouchDB 1.7.1的视图查询(必用)
1.x版本的CouchDB只能通过**视图(View)**来做条件查询,步骤如下:
1. 创建包含查询视图的设计文档
用curl发送PUT请求,创建一个名为products的设计文档,里面定义一个按产品名称查询的视图:
curl -X PUT http://127.0.0.1:5984/shop/_design/products \ -H "Content-Type: application/json" \ -d '{ "views": { "by_name": { "map": "function(doc) { if(doc.type === \"product\") emit(doc.name, doc); }" } } }'
这个视图的逻辑很简单:遍历数据库里的所有文档,只处理type为product的条目,然后把name作为查询键(key),整个产品文档作为值(value)输出。
2. 查询名称为Apple的产品
调用刚才创建的视图,指定key为"Apple"即可:
curl http://127.0.0.1:5984/shop/_design/products/_view/by_name?key=\"Apple\"
返回结果里就会包含你之前创建的Apple产品文档啦。
方案二:升级到CouchDB 2.x+后使用_find API
如果后续你把CouchDB升级到2.0及以上版本,就可以用你一开始想的_find接口了,具体命令如下:
curl -X POST http://127.0.0.1:5984/shop/_find \ -H "Content-Type: application/json" \ -d '{ "selector": { "type": "product", "name": "Apple" }, "fields": ["_id", "_rev", "name", "price", "type"] }'
selector:定义查询条件,这里同时匹配type=product和name=Apple,避免查到其他类型的文档fields:指定要返回的字段,按需选择可以减少返回数据量
内容的提问来源于stack exchange,提问作者wintermeyer
相关产品推荐
相关产品推荐

