CouchDB视图开发需求:返回文档中price_changes全部数据
没问题!要实现你想要的CouchDB视图,编写一个简单的Map函数就能搞定,我会结合你描述的需求和给出的示例格式分别说明:
CouchDB视图实现方案
1. 核心Map函数编写
你需要在目标数据库的设计文档中创建一个新视图,Map函数的逻辑是筛选出包含所需字段的文档,然后输出指定结构:
选项1:同时返回名称和完整price_changes(匹配你最初的需求描述)
function(doc) { // 先校验文档是否包含必要字段,避免处理无效数据 if (doc.name && doc.price_changes) { // 把name和price_changes合并后作为emit的key const outputKey = { name: doc.name, ...doc.price_changes }; emit(outputKey, null); } }
选项2:仅返回price_changes作为key(匹配你给出的示例格式)
function(doc) { if (doc.price_changes) { // 直接把price_changes作为key输出 emit(doc.price_changes, null); } }
2. 输出结果说明
CouchDB视图的默认返回结构会自动包含文档的id,加上你emit的key和value(这里我们设为null,因为不需要额外数据)。
比如选项1的返回结果会是:
{ "id": "c95718ebd00b13bc9a8b03a0e5005d51", "key": { "name": "USD", "0min": 0, "15min": 0, // 其他price_changes时段字段... }, "value": null }
选项2的返回结果就完全符合你给出的示例:
{ "id": "c95718ebd00b13bc9a8b03a0e5005d51", "key": { "0min": 0, "15min": 0, // 其他price_changes时段字段... }, "value": null }
3. 实用查询技巧
- 直接访问视图URL即可获取所有结果,比如:
http://你的CouchDB地址:5984/目标数据库/_design/设计文档名/_view/视图名 - 如果需要按名称筛选,用选项1的话可以添加查询参数:
?key={"name":"USD"} - 要是只需要特定时段的数据,也可以在Map函数里调整emit的内容,或者通过
startkey/endkey做范围查询
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

