作为MongoDB的一部分,我有三个不同的集合——A
、B
和AtoB
。
A
和B
是不同类型的实体,其中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过期时,文档将同时删除所有链接。