0
  • MongoDB 是否处理来自 TTL 集合的链接文档的一致性?

例如:如果“用户”模型指的是一个 TTL 集合,并且其中一个链接的用户因为太旧而被删除,那么它与各个组的链接是否会被删除?

var GroupSchema = new Schema({
    users           : [{
        type        : Schema.Types.ObjectId, ref: 'User'
    }]
});

mongoose.model('Group', GroupSchema);
  • 如果不是,那么处理因 TTL 而被删除的链接文档列表的最佳做法是什么?

在 CouchDB 中,您可以监听由 I/O 操作触发的事件,我认为,是否有任何类似的机制已经到位或目前正在为 MongoDB 实现?

如果重要的话,我使用的是 Node.js Mongoose ODM。

先感谢您 !

4

1 回答 1

1

MongoDB 不强制引用完整性。

MongoDB 没有触发器。

当一个文档被删除时,应用程序有责任确保所有引用的文档也被删除,并且指向它的任何引用都被删除或更新。当文档结束 TTL 是一个需要做的不仅仅是删除一个文档的事件时,数据库上的 TTL 功能不足以完成这项工作,您需要在应用程序级别创建不同的解决方案。

顺便说一句:当一个对象拥有许多没有它就毫无意义的孩子时(组合的情况,而不是聚合的情况),在 MongoDB 中将孩子嵌入到父文档中而不是将它们作为单独的文档通常是有意义的。这样它们就会与父级一起被删除。

此外,您应该始终问自己是否真的有必要真正删除数据,以及通过在其上设置标志将其标记为已删除是否更明智。在用户错误的情况下,删除删除标志很容易,但恢复数据库上的硬删除不是。

于 2013-10-21T09:19:52.760 回答