如何在MongoDB中创建一个字段不可变?

时间:2016-06-01 23:03:36

标签: python json node.js mongodb immutability

用例:我正在使用MongoDB(和Flask)编写后端。目前这还没有像Mongoose / Mongothon那样使用任何ORM。我想存储在文档中创建每个文档的用户的_id。我希望在创建之后修改该字段是不可能的。后端目前允许使用(基本上)del request.json["_creator_id"]

进行任意更新

我可以从request.json中筛选出_creator_id字段(类似于.ng-valid[required] { border-left: 5px solid #42A948; /* green */ } ),但我担心这并未涵盖可以修改语法以使字段更新的所有可能方式(嗯,点符号?)。理想情况下,我想在MongoDB本身中创建一次只写一次字段的方法,但是如果没有这样做,就会有一些防止代码更新字段的防弹方法。

2 个答案:

答案 0 :(得分:2)

imho没有知道防止mongo内部更新的方法。 由于您可以控制应用程序行为,因此有人仍然可以在应用程序之外进行此更新。 Mongo没有触发器 - 在sql世界中有可能作为数据保护并防止字段更改。

当您不使用ODM时,您可以拥有的CQRS模式将允许您控制应用程序行为并阻止此类更新。

答案 1 :(得分:0)

我在修改字段时遇到了同样的问题。

尝试https://www.npmjs.com/package/mongoose-immutable-plugin

该插件将拒绝对字段的每次修改尝试,并且适用于

  1. 更新

  2. UpdateOne

  3. FindOneAndUpdate

  4. UpdateMany

  5. 重新保存

它支持数组,嵌套对象等字段类型,并保护深度不变性。

插件还处理$ set,$ inc等更新选项。