mongodb有关系数据库中的trigger和procedure等属性吗?

Posted

技术标签:

【中文标题】mongodb有关系数据库中的trigger和procedure等属性吗?【英文标题】:does mongodb have the properties such as trigger and procedure in a relational database? 【发布时间】:2014-05-02 23:51:04 【问题描述】:

顾名思义,包括 map-reduce 框架 如果我想在插入记录之前触发事件以运行一致性检查或安全操作,我该如何使用 MongoDB?

【问题讨论】:

我试图回答我认为是你的问题。如果您需要更多信息,请编辑您的问题。 【参考方案1】:

MongoDB 不支持触​​发器,但是人们已经围绕它们创建了解决方案,主要使用 oplog,尽管这只会在您使用副本集运行时对您有所帮助,因为 oplog 是一个有上限的集合,可以跟踪数据更改复制的目的。 有关 nodejs 解决方案,请参阅:https://www.npmjs.org/package/mongo-watch 或查看更早的 SO 线程:How to listen for changes to a MongoDB collection?

如果您关心一致性,请阅读 mongoDB 中的写入问题。 http://docs.mongodb.org/manual/core/write-concern/ 通过设置插入写入关注级别,从火到希望从副本集的所有成员那里获得确认,您可以随心所欲地放松或严格。

因此,如果您想在插入数据之前运行一致性检查,您可能必须将该逻辑移至客户端应用程序,并将您的写入关注级别设置为确保一致性的级别。

【讨论】:

【参考方案2】:

MongoDb 没有触发器或存储过程。虽然有些解决方案曾尝试模拟该行为,但由于它不是内置功能,您需要确定这些解决方案是否对您有效。搜索“触发器和 mongodb”应该会找到几十个。都依赖于 oplog 和副本。

但是,鉴于 MongoDb 的性质和典型的 3 层架构,我希望在数据插入点(例如可能在 Web 服务器上),您将在 Web 服务器上运行必要的一致性和安全检查。您不会允许客户端(例如移动应用程序)在没有检查的情况下直接将数据设置到数据库集合中。

MongoDb 和扩展库的许多驱动程序已经内置了验证和一致性检查,因此要做的事情更少。对某些字段使用唯一索引还可以提供一定程度的一致性,这是您无法仅通过驱动程序实现的。看看像 findAndModify 这样的调用,它们会进行原子更新。

【讨论】:

以上是关于mongodb有关系数据库中的trigger和procedure等属性吗?的主要内容,如果未能解决你的问题,请参考以下文章

mongodb数据库的集合关联

Spring Boot项目中的MongoDB一对多和多对一关系

查找“a”行是不是与 ORM 中的“b”行有关系的最有效方法?

如何使用另一个有关系的表中的数据(user_id)从用户表中检索用户名

MongoDB(课时5 数据查询)

开发中列表与对象有关系吗?