0

我正在玩猫鼬模式。我有 3 个项目,每个项目都有一个相应的 ID 字段,如下所示:

"_id": "508dcb79cb1c8ad910000001","
"_id": "508dcba389e2f32e11000002","
"_id": "508dcba389e2f32e11000003","

是否有任何默认方法来处理那一大块 ID 以获得更干净的 ID,而无需设置自定义 ID 的数字来获取与 ID 对应的最后一个数字?或者我应该使用正则表达式或其他东西来通过 id 获取它们,如下所示:

app.get('/fields/:id', function(req, res) { ; });

并使用/field/1,/field/3或其他方式访问它们。

4

1 回答 1

2

如此处所述,文档的 ObjectID 由时间戳、机器 ID、进程 ID 和计数器组成。我看不出有一种方法可以单独使用计数器并得出 ObjectID。使用正则表达式搜索索引可能不是一个好主意,因为您最终会遍历索引中的所有 ObjectID。正如这里所指出的,只有简单的前缀正则表达式才能利用索引。此外,我认为多个文档可能具有相同的计数器,例如,如果在两台不同的机器上对同一个集合进行写入。

所以简短的回答是“不”。如果你真的想要短 ID,你可能应该滚动你自己的序列号,使用类似shortid的东西,或者只是通过一个自然唯一的索引(如果你的集合恰好有一个)来查找文档,比如电子邮件、用户名等。

于 2012-10-29T02:38:37.967 回答