我正在探索Mongo作为关系数据库的替代品,但在无模式集合的概念上遇到了问题.

从理论上讲,这听起来很不错,但一旦你将一个模型绑定到一个集合,这个模型就变成了你的实际模式.您不能再仅仅从模型中添加或删除字段,然后期望它继续工作.我在这里看到了与关系数据库管理更改相同的问题,即需要某种脚本才能从数据库模式的一个版本迁移到另一个版本.

我是不是从错误的Angular 来看这件事?这里的成员在更新其域模型时采取了哪些方法来确保其集合项与域模型保持同步?

编辑:值得注意的是,这些问题显然也存在于关系数据库中,但我特别要求使用无模式数据库和更具体的Mongo来缓解问题.谢谢

推荐答案

使用MongoDB进行模式迁移实际上比使用SQL server要轻松得多.

添加一个新字段很容易,旧记录会被设置为null,或者您可以使用属性来控制默认值[BsonDefaultValue("abc", SerializeDefaultValue = false)]

[BsonIgnoreIfNull]属性还便于在序列化文档时从文档中省略空对象.

删除一个字段也相当容易,你可以用[BSonExtraElements](见docs)来收集并保存它们,或者用[BsonIgnoreExtraElements]来简单地扔掉它们.

有了这些功能,真的不需要将每个记录转换为新的模式,当记录更新时,您可以根据需要缓慢地进行转换,也可以在后台缓慢地进行转换.


另外,既然你也对在Mongo中使用dynamic感兴趣,下面是我try 过的experiment个例子.这是一篇更新的帖子,里面有一个完整的serializer and deserializer for dynamic objects.

Mongodb相关问答推荐

MongoDB:就地分组嵌套数组的元素

如何在 mongodb 查找的外键中使用正则表达式

lexik_jwt_authentication下无法识别的选项api_platform

使用 mongo-driver/mongo 使用键/值对中的值表达式查找文档

程序可以运行,但我不断收到发送到客户端后无法设置标题,我应该忽略它吗?

如何在 MongoDb 中进行类似于嵌套 Sql Select 查询的嵌套查询

如何在 MongoDB 中进行内部连接?

Flask and Mongo

无法将 $match 运算符用于带有 ObjectId 的 mongodb/mongoose 聚合

什么是 mongodb 中的admin数据库?

Mongodb KeyFile 太开放权限

在 MongoDB 中合并两个集合

Cannot connect to MongoDB errno:61

在 MongoDB 上分片 GridFS

MongoDB:查询和检索嵌入式数组中的对象?

Mongodb错误:The positional operator did not find the match needed from the query

带有 either or查询的mongoose findOne

'this' 在 Mongoose 预保存挂钩中未定义

MongoError:failed to connect to server [localhost:27017] on first connect

有没有办法防止 MongoDB 向集合名称添加复数形式?