在将URL slug标识符添加到猫果式架构中时,如何迁移现有对象



我当前在URL中使用mongodb objectids,但我想使用此模块:https://github.com/dylang/shortid

但是,现有数据尚未包含这些slug。我该如何迁移它们?我在任何地方都在说您不需要迁移NOSQL中的数据。

这是一个示例模式,我正在添加" shortid"字段:

var ItemSchema = new Schema({
    name    : { type: String, required: true, trim: true }
    , description: { type: String, trim: true }
    , comments  : [CommentSchema]
    , shortid : { type: String, required: true }
});

我的目的是使用/items/ppbqwa9而不是/tock/times/508CBD80C0E1A44277000003

我将有一个.pre('save')方法,如果尚不存在,则会生成shortid。

,或者我可以将默认值为调用shortid.generate()?

的函数

两个要求:1)永远不要改变它2)

对现有对象进行恢复。

我认为您的选择要么是:让您的代码与索引可以在可能延长的时间内过渡或立即更新所有内容的事实代码更改。

后者似乎不那么混乱,但要求您能够批量处理所有项目文档。在这种情况下,您可以:

  1. 按照您的建议,在默认情况下向您的模式添加唯一的索引。使用schema.pre似乎是不必要的,因为ShortId.generate不是异步函数调用。类似shortid: { type: String, default: ShortId.generate(), required: true, index: {unique: true}}

  2. 写一个脚本以加载所有现有项目,并使用新的shortid属性保存它们。

  3. 调整代码的其余部分以开始使用shortid而不是id

最新更新