-2

有谁知道 MongoDB 生成的“_id”(或者可能是 Mongoose 保存)在中间包含“坏”这个词时意味着什么。

eg: 521b633274bad76823000002

我在网上或这里找不到答案。

这发生在“保存”时,但只有在我想“更新”文档时才发现。它不允许更新。

 db.collection.update(...

来自尝试的“更新”对象的回调始终为空,并且文档未更新。

切换我的数据库解决了这个问题,所以我相信这不是代码(而且代码很简单)

在 Node.js 上同时使用 mongojs 和 mongoose。

非常感谢,

4

2 回答 2

5

这并不意味着什么。

ObjectID是一个可以包含字符的十六进制字符串0123456789abcdef。这意味着任何可以用这 6 个字母书写的单词,例如“bad”、“beef”、“dead”、“deaf”、“babe”或“cafe”,都有一定的概率出现在其中(确切地说概率,请咨询我们的朋友)。

在您的情况下,字符串“bad”出现在作为机器 ID(“74bad7”)的三个字节中,因此同一台机器创建的所有 ObjectID 都将包含这个 6 位字符串。机器 ID 的生成方式取决于驱动程序,但通常使用主机名或 MAC 地址的 MD5 哈希的前 6 位来创建。因此,当您不再想要任何“坏”的 objectID 时,请尝试更改它们并强制使用它们,直到获得您喜欢的对象 ;)

您更新文档的问题一定有其他原因,但您提供的详细信息未包含问题可能是什么的提示。

于 2013-08-26T15:05:12.980 回答
2

这只是一个巧合,因为任何十六进制字符abcdef都可以出现在 ObjectID 值中的任何位置,并且偶尔会组合成一些有趣的词,例如 bad、dead、beef 等。

于 2013-08-26T15:00:45.383 回答