0

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

但是现有的数据还没有这些数据。我怎样才能将它们全部迁移?我所看到的每一个地方,人们都在说您不需要在 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)追溯应用于现有对象。

4

1 回答 1

0

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

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

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

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

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

于 2012-10-29T07:39:03.563 回答