我需要获取文档,其中createdBy=userId或updateBy= userId。 我在 CouchDB 中有下一个地图功能:
function (doc) {
if (doc.$doctype === 'Records') {
emit([doc.createdBy, doc.updatedBy], doc);
}
}
和节点.js后端
getData: async (userId) => {
return await adapter.getRows(
'Records', 'url',
{
startkey: [userId, userId],
endkey: [userId],
}
);
}
但它作为运算符 AND 工作。请帮我找到错误。
据我了解,您还不能从单个请求中执行OR。
(从 CouchDB 2.1 开始,_queries 端点尚不可用。将来,您将能够在同一 HTTP 请求中请求多个查询(。
使用开始键和结束键语法,OR 等效于:
创建者
- 开始键=[约翰]
- endkey=[john,{}]
更新者
-
开始键=[空,约翰]
-
endkey=[{},john]
然后,您可以执行两个结果集的并集。
如果您使用的是CouchDB 2.X,则应将Mango选择器与$or运算符一起使用。
其他解决方案
您可以为此请求创建特定视图。
例如,您可以同时索引 updateBy 和 createdBy。
if (doc.$doctype === 'Records') {
emit([doc.createdBy, doc.createdAt]);
emit([doc.updatedBy, doc.createdAt]);
}
然后,您可以使用startkey=[author]&endkey=[author,{}]
我会这样做:
function (doc) {
if (doc.$doctype === 'Records') {
emit(doc.createdBy, "created");
emit(doc.updatedBy, "updated");
}
}
然后您可以使用 userID 的单个键进行查询,如果需要,该值是有关操作的额外信息,否则您可以将其保留为 nil。
不要发出 doc 的值,因为这是多余的,您始终可以使用
include_docs
查询选项。