我有亲子关系。我的父文档有一个名为的字段,该字段lastRevisionId
存储父文档最新版本的标识符。
子文档是不可变的键/值对,描述特定版本的父文档的属性。
家长
{
"_id": "parent-1",
"lastRevisionId": "rev1"
}
孩子
{
"_id": "parent-1|rev1|name",
"revisionId": "rev1",
"key": "name",
"value": "Test Server"
}
对于每个修订版,我们都会为新修订版索引一个新的子文档,因此在我们将 Parent 更新为 rev2 之后,我们将在 ES 中拥有这个:
家长
{
"_id": "parent-1",
"lastRevisionId": "rev2"
}
孩子们
{
"_id": "parent-1|rev1|name",
"revisionId": "rev1",
"key": "name",
"value": "Test Server"
}
{
"_id": "parent-1|rev2|name",
"revisionId": "rev2",
"key": "name",
"value": "Updated Server"
}
我需要的是一个查询,它将返回子文档revisionId
上的子文档等于lastRevisionId
父文档上的。
这样做的原因是,我们希望存储这些修订的历史数据,但我们也希望能够仅获取最新信息。历史数据仅从审计的角度真正有用,但最新数据将描述大量有用的当前状态。
我们正试图避免对这些数据进行非规范化,因为父版本的任何单个修订都可能有成百上千的子文档,并且每次更改都更新它们会引入其自身的缩放问题。
如果这是 SQL,查询将类似于:
SELECT c.* FROM child as c
INNER JOIN parent as p
ON p.lastRevisionId= c.revisionId