我在couchdb存储中有以下json(简化)对象:
[{
"_id": "5ea7a53e670b432e0fe22a7bc10024db",
"_rev": "1-ae70c8906f7aa6d73539a89f7ad960ee",
"type": "job"
}, {
"_id": "5ea7a53e670b432e0fe22a7bc10041d9",
"_rev": "4-fa0ba68c35ca548b497a7309389f9087",
"type": "scan",
"job_id": "5ea7a53e670b432e0fe22a7bc10024db",
"number": 1
}, {
"_id": "5ea7a53e670b432e0fe22a7bc100520e",
"_rev": "4-3e6b1a028786c265ecb7362e245d049e",
"type": "scan",
"job_id": "5ea7a53e670b432e0fe22a7bc10024db",
"number": 2
}]
我想使用密钥[“5ea7a53e670b432e0fe22a7bc10024db”,2](作业ID和扫描编号)发布请求。如何为视图创建一个map函数来过滤掉具有给定id的作业以及与job_id和数字匹配的度量?
谢谢, 拉杜
答案 0 :(得分:1)
您对该请求的预期输出是什么?如果您只想进行扫描,请在map
中发出要搜索的密钥:
function (doc) {
if (type == "scan" && number) {
emit([doc.job_id, doc. number], doc);
}
}
如果您需要两个文档 - 作业(完整文档,而不仅仅是id
)和扫描,请在请求中使用emit
参数的单个include_docs=true
中同时发出这两个文档网址:
function (doc) {
if (doc.type == "scan" && doc.number) {
emit([doc.job_id, doc. number], {scan: doc, _id: doc.job_id});
}
}
或两个emit
中的:
function (doc) {
if (doc.type == "scan" && doc.number && doc.job_id) {
emit([doc.job_id, doc. number, "job"], {_id: doc.job_id);
emit([doc.job_id, doc. number, "scan"], {_id: doc._id});
}
}
您将在网址中获得包含startkey=["5ea7a53e670b432e0fe22a7bc10024db", 2]&endkey=["5ea7a53e670b432e0fe22a7bc10024db", 2, {}]&include_docs=true
(或keys=[]
)的文档。
检查include_docs
选项的view API。