将url slug标识符添加到mongoose模式时如何迁移现有对象

时间:2012-10-29 06:24:54

标签: node.js mongodb mongoose slug

我目前在我的网址中使用Mongodb ObjectIds,但我想使用此模块: https://github.com/dylang/shortid

但现有的数据都没有这些slu ..我怎样才能将它们全部迁移?无论我到哪里,人们都说你不需要在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等网址代替/ items / 508cbd80c0e1a44277000003

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

或许我可以将默认值设为调用ShortId.generate()的函数?

两个要求: 1)永远不要改变它 2)回溯地应用于现有对象。

1 个答案:

答案 0 :(得分:0)

我认为您的选择要么是:让您的代码处理索引可能在一段时间内处于转换状态的事实,或者一次更新所有内容然后再进行一次代码更改。

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

  1. 使用您建议的默认值为您的架构添加唯一索引。使用schema.pre似乎是不必要的,因为ShortId.generate不是异步函数调用。像shortid: { type: String, default: ShortId.generate(), required: true, index: {unique: true}}

  2. 这样的东西
  3. 编写脚本以加载所有现有项目,并使用新的shortid属性保存它们。

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