node.js - Mongoose Node Express 需要至少 18 个位置的 _id 号
问题描述
我在后端使用带有 Node、Express 和 MongoDB (mongoose ODM) 的 MEAN Stack。现在,我有一个集合的模式模型,该集合的 _id 值被覆盖,并且应该由至少 18 个位置的 long 或另一个大数字数据类型表示。我想为此使用 mongoose-long。原因是,我有来自 2 个集合的某种“复合键”,我用一个集合中的 12 个位置表示,然后将另一个集合中的其他 6 个数字位置递增 1。这样,我可以通过数字前缀关联哪些集合属于一起。
但是,当我生成一些数据(浮点数)并为 _id 输入一个长数字(如“123456789123456778”)并将其传递给 mongodb 时,它会被保存,但似乎对数字的最后三个位置(数百)进行了四舍五入当我查询 id 字段时。此外,如果我将数字增加 1,由于重复键,它无法保存条目。这是一个 mongoose / MongoDB 问题,还是一个 javascript 或 python 客户端问题?我在这里读过:Mongodb can't find object with too long _id , that you can't query too long id numbers, 也许输入太长的数字也是一样的......
name: 'MongoError',
message: 'E11000 duplicate key error collection: dnz.fps index: _id_ dup key: { : 1.234567891234568e+17 }',
driver: true,
code: 11000,
index: 0,
errmsg: 'E11000 duplicate key error collection: dnz.fps index: _id_ dup key: { : 1.234567891234568e+17 }',
getOperation: [Function],
toJSON: [Function],
toString: [Function] }
有一些解决方法吗?还是为了在 MongoDB 中获得正确的数字大小?我还考虑过更改我的数据模型,并为我的 Collection 使用类似 2 的 id,但这会再次更改我的所有查询逻辑,我不知道当我创建模型的新实例时这是否会变得混乱。例如,我必须从创建的实例中传递 id 值并以某种方式将其插入到另一个集合中......
有没有人更好地了解如何解决这个大数字问题?
解决方案
推荐阅读
- laravel - Livewire:输入时防止验证码图像刷新
- xunit.net - 我可以将代表传递给 Xunit 理论吗
- web-audio-api - Tone.js Follower 创建侧链音量控制
- exe - a.out 文件和 .elf 文件格式有什么区别
- microsoft-graph-api - MS Graph API - 预订业务 - 添加具有“管理员”角色的员工创建“externalGuest”
- javascript - 按钮加载问题(没有包)
- java - 如何从 maven 插件中的 java 代码中引用 pom 中的 artifactId?
- c# - 如何在字典中添加 3 个以上的项目
- c# - 我可以检查用户是否响应然后将布尔值更新为 true 吗?
- css - Vue动态绑定到类不起作用