例如:如果“用户”模型指的是TTL集合,并且其中一个链接用户因年龄过长而被删除,那么它的链接是否会被删除?
var GroupSchema = new Schema({
users : [{
type : Schema.Types.ObjectId, ref: 'User'
}]
});
mongoose.model('Group', GroupSchema);
在CouchDB中,您可以监听由我认为的I / O操作触发的事件,是否有适当的机制或当前为MongoDB实现?
如果重要,我正在使用Node.js Mongoose ODM。
提前谢谢!
答案 0 :(得分:1)
MongoDB不强制引用完整性。
MongoDB没有触发器。
当文档被删除时,应用程序有责任确保删除任何引用的文档,并删除或更新指向它的任何引用。当文档结束TTL是一个事件,它需要做的不仅仅是删除那个文档,数据库上的TTL功能不足以完成工作,你需要在应用程序级别创建一个不同的解决方案。
顺便说一下:当一个对象拥有许多没有它时没有意义的子项(一个组合而非聚合的情况),在MongoDB中将子项嵌入到父文档中通常是有意义的而不是将它们作为单独的文件。这样他们就会与父母一起被删除。
此外,您应该始终问自己是否真的有必要真正删除数据,如果通过在其上设置标记将其标记为已删除是不明智的。如果出现用户错误,删除delete-flag很容易,但是不能在数据库上恢复硬删除。