繁体   English   中英

如何将 mongodb 中旧文档集合的架构更改与默认值同步

[英]How to sync the schema change for old document collection in mongodb with default values

如何应用架构更改以与默认值同步到 mongodb 中的所有旧数据

import mongoose from "mongoose";

interface ITodo {
  title: string;
  description: string;
  by: string;
}

interface todoModelInterface extends mongoose.Model<TodoDoc> {
  build(attr: ITodo): TodoDoc;
}

interface TodoDoc extends mongoose.Document {
  title: string;
  description: string;
  by: string;
}

const todoSchema = new mongoose.Schema({
  title: {
    type: String,
    required: true,
  },
  description: {
    type: String,
    required: true,
  },
  by: {
    type: String,
    required: true,
  },
});

todoSchema.statics.build = (attr: ITodo) => {
  return new Todo(attr);
};

const Todo = mongoose.model<TodoDoc, todoModelInterface>("Todo", todoSchema);

Todo.build({
  title: "some title",
  description: "some description",
  by: "special",
});

Todo.collection.dropIndexes(function () {
  Todo.collection.reIndex(function (finished) {
    console.log("finished re indexing");
  });
});

Todo.collection
  .getIndexes()
  .then((indexes: any) => {
    console.log("indexes:", indexes);
  })
  .catch(console.error);

export { Todo };

D b:

[{
    "_id": {
        "$oid": "62cee1eea60e181e412cb0a2"
    },
    "title": "one",
    "description": "one desc"
},{
    "_id": {
        "$oid": "62cee2bd44026b1f85464d41"
    },
    "title": "one",
    "description": "one desc",
    "by": "alphs"
},{
    "_id": {
        "$oid": "62cee3c8cf1592205dacda3e"
    },
    "title": "one",
    "description": "one desc",
    "by": "alphs"
}]

这里旧数据仍然缺少“by”键,同样如果嵌套模式更改可能会影响旧用户,我们如何在运行时在 mongodb 中定义旧数据的默认集合而不使用更新查询迁移?

您是否尝试过为“by”设置默认值。 通过提供默认值,如果旧数据缺少值,则默认值将启动并返回提供的默认值。 阅读 Mongoose 默认值:这里 我不知道这是否是一个好习惯,但是当架构发生更改并且不想运行更新查询时,我们也会使用此方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM