我需要获取doc,其中createdBy = userId或updatedBy = userId。 我在CouchDB中有下一个map func:
function (doc) {
if (doc.$doctype === 'Records') {
emit([doc.createdBy, doc.updatedBy], doc);
}
}
和node.js后端
getData: async (userId) => {
return await adapter.getRows(
'Records', 'url',
{
startkey: [userId, userId],
endkey: [userId],
}
);
}
但它作为运算符AND。请帮我找错。
答案 0 :(得分:0)
根据我的理解,你还不能通过单一请求进行OR。
(从CouchDB 2.1开始,_queries端点尚不可用。将来,您将能够在同一HTTP请求中请求多个查询。
使用startkey和endkey语法,OR将等同于:
<强> createdBy 强>
<强> updatedBy 强>
startKey = [零,约翰]
endkey = [{},约翰]
然后,您可以对两个结果集进行并集。
如果您使用的是CouchDB 2.X,则应使用带有 $或运算符的Mango选择器。
您可以为此请求创建特定视图。
例如,您可以索引updatedBy和createdBy。
if (doc.$doctype === 'Records') {
emit([doc.createdBy, doc.createdAt]);
emit([doc.updatedBy, doc.createdAt]);
}
然后,您可以使用startkey=[author]&endkey=[author,{}]
答案 1 :(得分:0)
我会这样:
function (doc) {
if (doc.$doctype === 'Records') {
emit(doc.createdBy, "created");
emit(doc.updatedBy, "updated");
}
}
然后您可以使用userID的单个键进行查询,如果需要的话,该值是有关操作的额外信息,否则可以将其保留为零。
请勿发出doc值,因为这是多余的,您始终可以使用
获取该文档include_docs
查询选项。