首页 > 解决方案 > 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 值并以某种方式将其插入到另一个集合中......

有没有人更好地了解如何解决这个大数字问题?

标签: node.jsmongodbmongooselong-integer

解决方案


推荐阅读