首页 > 解决方案 > Mongoose:转换现有集合中的 _id 类型

问题描述

我有一个现有的 mongoose 集合,使用 _id 的默认 ObjectID 类型。

我想迁移此集合以将 UUID 用于 _id,理想情况下无需特殊迁移步骤。

我的新架构使用包mongoose-uuid4

var uuidv4 = require('uuid/v4');
require('mongoose-uuid4')(mongoose);

const schema = new mongoose.Schema({
    _id: { type: mongoose.Types.UUID, default: uuidv4 },
    ...
});

const Model = mongoose.model('Model', schema);

我的理论是,我现有的 ObjectID 可以被零填充为有效的 UUID 对象,因此我应该能够编写我的访问方法,以便我可以通过短 ObjectID 或完整的 UUID 找到。

如果我在这个集合上执行 Model.find({}),文档返回时没有 _id 字段,但我确实抛出了一个异常,表明它无法将 id 值转换为 UUID:

ValidationError: <Model> validation failed: undefined: Could not cast 6132ba2d6474631eeb038a9b to UUID.

所以这让我觉得有一个地方我可以插入一些代码来进行类型转换以使其工作,因为猫鼬堆栈的某些部分试图进行这种转换,但不知道如何去做。

我的第一个偏好是允许升级现有 _id 字段的即时方式,但我也可以一次性“修复”通过集合来升级字段。

任何建议表示赞赏。

标签: node.jsmongodbmongooseuuidmongoose-schema

解决方案


推荐阅读