Mongodb生成ID包含单词“bad”

Posted

技术标签:

【中文标题】Mongodb生成ID包含单词“bad”【英文标题】:Mongodb's generated UID contain the word "bad" 【发布时间】:2013-08-29 02:18:56 【问题描述】:

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

eg: 521b633274bad76823000002

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

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

 db.collection.update(...

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

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

在 Node 上同时使用 mongojs 和 mongoose。

非常感谢,

罗伯

【问题讨论】:

更正,它看起来就像在一个记录上。谢谢。听起来我是在红鲱鱼。 :)) 好吧,更新不起作用的事实让我失望了,我想了一会儿,也许 ObjectId 类的一部分正在返回“坏” 是的@Sammaye,讨厌这种我“认为”我发现了与错误同时发生的事情的时候。 - 不可能是我 :S 在我走的花园小路上。谢天谢地,像你这样的人。 【参考方案1】:

没有任何意义。

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

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

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

【讨论】:

感谢 Phillipp,为了分享这些信息,值得提出这个问题!干杯【参考方案2】:

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

【讨论】:

感谢约翰尼和之前的评论已经消失。是的,看起来我跳到了更新失败的原因,即坏=损坏或类似的。

以上是关于Mongodb生成ID包含单词“bad”的主要内容,如果未能解决你的问题,请参考以下文章

mongodb 插入之后怎样获取id

mongodb Aggregation聚合操作之$bucket

实现处理拼写错误单词的 mongo db 搜索的最佳方法是啥?

使用 Golang mongo-driver 的 MongoDB 自动增量 ID

pcel安装的mongodb的两个问题的解决方案

mongodb morphia怎么获取最大的id