如何在 mongoDB 中使用另一种类型的 id

Posted

技术标签:

【中文标题】如何在 mongoDB 中使用另一种类型的 id【英文标题】:How to use another type of id in mongoDB 【发布时间】:2021-08-04 09:03:00 【问题描述】:

任务是将 mongoDb 中的默认唯一 _id 更改为具有那种视图 0000100002 的自动增量 ID,我只完成了类似 12 的自动增量,但不确定是对或不对

这是我的自动增量代码:

//here we sort by id and found the last added product
const lastProd = await this.productModel
      .findOne()
      .sort( _id: 'desc' )
      .exec();
 
 
    const newProduct = new this.productModel(
    //if last prod is not null, do increment
      _id: lastProd ? lastProd._id + 1 : 0,
      title,
      description: desc,
      price,
      image:image.filename,
    );
    const result = await newProduct.save();

我的代码结果照片

【问题讨论】:

一个文档的_id是mongoDB自动设置的,是16进制的值,我觉得不能递增。 @Gabriel Lupu,我已经测试了我的代码示例,并且它有效,问题是我不知道我的实现方式是正确的以及如何将它带到这个视图@987654331 @ heremongodb自增教程 好的,所以你插入了你自己的 id,为什么你需要在 1 之前的所有这些零? 因为任务要求 【参考方案1】:

MongoDB 不会让您保存类型为 number 且以一堆零开头的 prop。

我会将 id 保存为字符串类型,并在使用它时将其转换为数字,并将其作为字符串保存回 mongoDB(如果确实需要)。

const parseIdFromNumber = id => 
  if (id < 10) return `000$id`;
  if (id < 100) return `00$id`;
  if (id < 1000) return `0$id`;


const a = parseIdFromNumber(4);
const b = parseIdFromNumber(22);
const c = parseIdFromNumber(233);

// save to db
console.log(a, b, c)
// converting string ids to numbers
console.log(+a, +b, +c)

总之,将您的 id 保存为带有额外零的字符串,在使用它们时将它们转换为数字,然后再保存到 DB 中返回字符串。

【讨论】:

感谢您的回答,据我了解,mongoDB/mongoose 没有实现任务的功能,我应该通过在 js 中编写自己的代码来完成,请告诉我,是对吗? 是的,mongoDB 不会让你添加以一堆零开头的数字。如果您需要进一步说明,请告诉我。

以上是关于如何在 mongoDB 中使用另一种类型的 id的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 QFont 选择另一种字体?

如何在mongodb索引中使用自己的时间戳

MongoDB学习笔记-数据格式及数据类型

mongodb:如何为每个数组元素创建_id?

如何让mongodb返回一个带有@id和没有href的对象?

Oracle中如何用SQL把字符串转换成整型