Mongodb生成的UID包含单词“bad”

时间:2013-08-26 14:38:43

标签: node.js mongodb mongoose

有没有人知道MongoDB(或者Mongoose保存)生成的“_id”是什么意思,当它在中间包含“坏”字时。

eg: 521b633274bad76823000002

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

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

 db.collection.update(...

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

切换我的数据库解决了这个问题,所以我确信这不在代码中(并且代码非常简单)

在Node上同时使用mongojs和mongoose。

非常感谢,

罗布

2 个答案:

答案 0 :(得分:5)

这并不意味着什么。

ObjectID是一个十六进制字符串,可以包含字符0123456789abcdef。这意味着任何可以用这6个字母写的字,如“坏”,“牛肉”,“死”,“聋”,“宝贝”或“咖啡馆”都有一定的概率出现在它们中(对于确切的概率,请咨询our friends)。

在您的情况下,字符串“bad”出现在三个字节中,即机器ID(“74bad7”),因此同一台机器创建的所有ObjectID都将包含此6位数字符串。如何生成计算机ID取决于驱动程序,但通常使用主机名或MAC地址的MD5哈希的前6位数创建。因此,当你不再需要任何“坏”的objectID时,试着改变它们并强制它们直到得到你喜欢的那个;)

您更新文档时遇到的问题必须有其他原因,但您提供的详细信息并未包含提示可能出现的问题。

答案 1 :(得分:2)

这只是一个巧合,因为任何十六进制字符abcdef都可以出现在ObjectID值的任何位置,偶尔也可以组成一个有趣的词,如坏,死,牛肉等。