TTL删除后如何删除相关文档



作为MongoDB的一部分,我有三个不同的集合——ABAtoB

AB是不同类型的实体,其中AtoB在它们之间的连接如下-

A:

{
_id: ObjectId,
timestamp: Date,
keyA: string
}

B:

{
_id: ObjectId,
timestamp: Date,
keyB: number
}

AtoB:

{
_id: ObjectId,
aId: ObjectId, // Points to a document from A
bId: ObjectId // Points to a document from B
}

我在A文档上创建了一个TTL索引,当timestamp密钥超过一小时时,该索引将被删除。基于已删除的A的已删除_id属性,是否可以以某种方式删除所有相关的AtoB文档?

换句话说,是否不仅可以使用TTL删除A文档,还可以删除被删除文档的相关文档?

感谢

总之,不,不在此设置中。

您可以选择:

  • 设置changestream工作程序以删除链接
  • 设置一个cron作业以每分钟清理一次链接集合
  • 将AtoB链接嵌入到A文档中

我建议稍后进行,但这实际上取决于更改对应用程序其余部分的可行性。拥有一个专用的查找集合实际上是RDBS的一种实践。它在Mongo宇宙中有非常小众的用例。

您的A文件将如下所示:

{
_id: ObjectId,
timestamp: Date,
keyA: string,
bIds: [
bId: ObjectId,
bId: ObjectId,
....
] 
}

当文档的ttl过期时,文档将同时删除所有链接。

最新更新