我当前在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)
我认为您的选择要么是:让您的代码与索引可以在可能延长的时间内过渡或立即更新所有内容的事实代码更改。
后者似乎不那么混乱,但要求您能够批量处理所有项目文档。在这种情况下,您可以:
按照您的建议,在默认情况下向您的模式添加唯一的索引。使用
schema.pre
似乎是不必要的,因为ShortId.generate
不是异步函数调用。类似shortid: { type: String, default: ShortId.generate(), required: true, index: {unique: true}}
写一个脚本以加载所有现有项目,并使用新的
shortid
属性保存它们。调整代码的其余部分以开始使用
shortid
而不是id
。