我目前在我的网址中使用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)回溯地应用于现有对象。
答案 0 :(得分:0)
我认为您的选择要么是:让您的代码处理索引可能在一段时间内处于转换状态的事实,或者一次更新所有内容然后再进行一次代码更改。
后者似乎不那么混乱,但要求您能够批量处理所有项目文档。在这种情况下,您可以:
使用您建议的默认值为您的架构添加唯一索引。使用schema.pre
似乎是不必要的,因为ShortId.generate
不是异步函数调用。像shortid: { type: String, default: ShortId.generate(), required: true, index: {unique: true}}
编写脚本以加载所有现有项目,并使用新的shortid
属性保存它们。
调整代码的其余部分以开始使用shortid
而不是id
。