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

用例:我正在使用MongoDB(和Flask)写一个后端。 目前,这并没有使用像Mongoose / Mongothon这样的ORM。 我想将创build每个文档的用户的_id存储在文档中。 我希望在创build之后不可能修改该字段。 后端当前允许使用(本质上) collection.update_one({"_id": oid}, {"$set": request.json})进行任意更新。

我可以从request.json中过滤出_creator_id字段(类似于del request.json["_creator_id"] ),但是我担心这并不能覆盖所有可能的修改语法的方法来使字段变成更新(嗯,点符号?)。 理想情况下,我想要一种在MongoDB中自己编写一次字段的方法,但是如果没有这个方法,那么可以采用一些防止代码中字段更新的方法。

恕我直言,没有任何方法可以防止Mongo内部的更新。 由于您可以控制应用的行为,所以有人仍然可以在应用以外进行此更新。 Mongo没有触发器 – 在sql环境中,它可以作为数据守卫并防止现场更改。

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