在mongo中,是否有可能有一个看起来合法但不可能存在的_id?

我正在做一个Web应用程序的unit testing,我想做一个testing用例,看看我的应用程序是否会在有人试图获得一个永远不会存在的mongo文档时发回相应的错误信息。

为了给出更多的上下文,Web应用程序根据mongo数据库中该项目的_id发送有关某些项目的信息。 用户能够获得任何项目的_id,因为所有项目都可以向公众查看。

我想知道的是,有可能有一个_id可以在数据库中查询,但它可能永远不会存在?

如果这是可能的,那么我可以做一个testing用例来查询mongo数据库,并在每次保证时发送相应的错误信息。 现在,我正在使用分配给不再存在的项目的mongo _id。

我对这个_id的要求是:

  • 1)它需要与正常_id相同的长度
  • 2)它需要与_id(我假设的hex)相同的字符组成,
  • 3)mongo实际上永远不会是一个真正的_id,mongo会分配给一个文档。

另外值得注意的是,用户创build项目时永远不能分配_id。 所有_id任务正在由mongo处理。

如果它符合上述所有我会很高兴。

他们只有我能想到的是000000000000000000000000,但我不能确认,如果这可以用作_id或不?

但是,出于某种原因,mongo永远不能分配_id

你需要区分“mongodb永远不会产生这个id”,“如果我们提供mongodb将永远不会接受这个id”。

对于前者,你的全零对象id的例子很好。 Mongodb永远不会生成这样的id(因为时间戳生成规则,如果没有其他)

如果是后者,这是不可能的。 一个mongo对象id基本上是一个12字节的二进制blob,没有无效值或限制值。 所有的值都是有效的。

另外请注意, _id字段可以取任何值:string,数字,对象ID,对象,你有什么。 除了数组。