node.js - 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 字段的即时方式,但我也可以一次性“修复”通过集合来升级字段。
任何建议表示赞赏。
解决方案
推荐阅读
- android - '有比 [5,6) 更新的 com.facebook.android:facebook-android-sdk 版本:4.34.0 '
- google-maps - Google Static Streetview API 与 Google Maps Embed API 中的不同默认视口
- html - 如何防止没有php脚本的网页直接访问?
- python - 如何计算所有文件夹和子文件夹中具有特定扩展名的文件数
- python - Pandas str() 方法返回 nan 值 - 如何保留数值?
- sql-server - 为什么我在查询计划(SQL Server)中使用 Key Lookup 进行排序操作
- java - 如何检测用户是否已确认在 PackageInstaller (Android) 中安装
- python - 从两个列表中创建具有多个值的 dict。将多个键组合为一个
- javascript - 如何更改纯 CSS JS 中的 ID?为什么我的代码不起作用?
- r - 提取文件夹中所有文件的列名