【发布时间】:2020-05-16 23:32:22
【问题描述】:
以关系数据库为例,给定如下两个表,当tableA 和tableB 中的行具有相同的值时,它们代表相同的“事物”但处于不同的“状态”。所以对于ID=1,这个东西经过了stage1和2。但是对于ID=2,这个东西只经过了stage1。
tableA (Id, columnA, columnB)
1, "a", "b"
2, "x", "y"
3, "z", "a"
tableB (Id, columnA, columnB)
1, "e", "f"
我想从tableA 中找到所有不存在在tableB 中的行。
select a.*
from tableA a
left join
tableB b
on a.Id = b.Id
where b.Id is null
所以上面的 SQL 将显示 tableA 中的第 2 行和第 3 行。
如何在 CouchDB 中做类似的事情?假设我有 4 个如下所示的文档。
{ "_id":"a-1", "type":"A", "correlation_id": "1" }
{ "_id":"a-2", "type":"A", "correlation_id": "2" }
{ "_id":"a-3", "type":"A", "correlation_id": "3" }
{ "_id":"b-1", "type":"B", "correlation_id": "1" }
如何创建只显示文档id = a-2 and a-3 的视图?我不想过滤,只想显示所有没有type B 的文档。我可以做一个 group by and count(*) 等效视图,但我不能做一个 group by, having count(*) = 1 等效。
我正在使用 CouchDB 3.0。
【问题讨论】:
-
我发现了一些较旧的帖子。 stackoverflow.com/questions/14413953/… 但是……“列表”功能不再可用。 “列表函数在 CouchDB 3.0 中已弃用,将在 CouchDB 4.0 中删除。”也许我不能“不在”使用 CouchDB,而不得不提出不同的文档设计。
-
这些文档是视图的结果吗?如果它们只是数据库中的文档,那么您的解决方案就是一个视图。
-
那些具有上述“_id”属性的“文档”是 CouchDB 文档。我能够使用计数和分层键进行一些“分组”以进行查看,但我不确定如何在 2 种不同类型的文档中获得“不在”行为。