我在后端使用带有Node,Express和MongoDB(mongoose ODM)的MEAN Stack . 现在,我有一个集合的模式模型,其具有被覆盖的_id值,并且应该由具有至少18个位置的长数字或其他大数字类型表示 . 我想用mongoose-long . 原因是,我有2个集合中的某种“复合键”,我用一个集合中的12个位置代表,然后从另一个集合中增加其他6个数字位置,我增加1 . 这样,我可以通过数字前缀将哪些集合归属于一起 .

但是,当我生成一些数据(浮点数)并为_id输入一个很长的数字,如"123456789123456778"并将其传递给mongodb时,它会被保存,但似乎有一个四舍五入到数字的最后三个位置(数百)查询id字段 . 此外,如果我将数字增加1,由于重复键,它无法保存条目 . 这是一个mongoose / MongoDB问题,还是一个javascript或python客户端问题?我在这里读到:Mongodb can't find object with too long _id,你不能查询太长的id号,也许它输入太长的数字是一样的...

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值并以某种方式将其插入到其他集合中...

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