我们正在快速开发一个使用Mongoose的应用程序,我们的模式经常发生变化.我似乎无法找到一种正确的方法来更新现有文档的模式,而不将它们从零开始完全重新创建.

我遇到了http://mongoosejs.com/docs/api.html#schema_Schema-add个,看起来是对的.关于如何实际实现这一点,几乎没有文档,这对刚接触MongoDB的人来说非常困难.

我只想添加一个名为enabled的新字段.我的模式定义是:

var sweepstakesSchema = new Schema({
    client_id: {
        type: Schema.Types.ObjectId,
        ref: 'Client',
        index: true
    },
    name: {
        type: String,
        default: 'Sweepstakes',
    },
    design: {
        images: {
            type: [],
            default: []
        },
        elements: {
            type: [],
            default: []
        }
    },
    enabled: {
        type: Boolean,
        default: false
    },
    schedule: {
        start: {
            type: Date, 
            default: Date.now
        },
        end: {
            type: Date,
            default: Date.now
        }
    },
    submissions: {
        type: Number,
        default: 0
    }
});

推荐答案

Mongoose中没有任何关于迁移现有文档以符合模式更改的内容.根据需要,您需要在自己的代码中这样做.在像新的enabled字段这样的情况下,编写代码可能是最干净的,这样它就可以将丢失的enabled字段视为设置为false,这样就不必接触现有的文档.

至于模式本身的更改,您只需更新您的Schema定义(如图所示),但像default个值的新字段这样的更改只会影响future 的新文档.

Mongodb相关问答推荐

如何拉平mongo DB中的对象并在根目录中保存时有条件地重命名字段?

在提供的文档(_Id)之后和之前,是否有一个Mongo操作来获取已排序(和/或过滤)集合中的文档计数?

MongoDB $lookup 查找字段值数组

在 MongoDB 中加入多个集合

找到一个用户,然后使用 MongoDB 根据他们的总分获得他们的排名

根据聚合管道MongoDB Atlas触发器中的条件更新多个字段

Mongodb按值分组并计算出现次数

连接到远程 mongo 服务器导致异常连接失败

如何将 json 字符串编组到 bson 文档以写入 MongoDB?

MongoDB C# 驱动程序 - 如何将 _id 存储为 ObjectId 但映射到字符串 Id 属性?

哪种 NoSQL DB 最适合 OLTP 金融系统?

在 MongoDB 中创建简短、唯一的对象 ID

用 BsonRepresentation(BsonType.ObjectId) vs BsonId vs ObjectId 在 C# 中装饰属性之间的区别

从 mongodb 中的副本配置重新开始

如何使用原子操作在一个文档中切换布尔字段?

Flask:设置应用程序和请求特定的属性?

Mongoose 版本控制:when is it safe to disable it?

MongoDB mongoexport 查询

按 id 删除记录?

mongoosefind()不返回结果