有没有人知道MongoDB(或者Mongoose保存)生成的“_id”是什么意思,当它在中间包含“坏”字时。
eg: 521b633274bad76823000002
我在网上或这里找不到答案。
这发生在“保存”上,但只在我想“更新”文档时才发现。它不允许更新。
db.collection.update(...
来自尝试的“已更新”对象的回调始终为null,并且文档未更新。
切换我的数据库解决了这个问题,所以我确信这不在代码中(并且代码非常简单)
在Node上同时使用mongojs和mongoose。
非常感谢,
罗布
答案 0 :(得分:5)
这并不意味着什么。
ObjectID是一个十六进制字符串,可以包含字符0123456789abcdef
。这意味着任何可以用这6个字母写的字,如“坏”,“牛肉”,“死”,“聋”,“宝贝”或“咖啡馆”都有一定的概率出现在它们中(对于确切的概率,请咨询our friends)。
在您的情况下,字符串“bad”出现在三个字节中,即机器ID(“74bad7”),因此同一台机器创建的所有ObjectID都将包含此6位数字符串。如何生成计算机ID取决于驱动程序,但通常使用主机名或MAC地址的MD5哈希的前6位数创建。因此,当你不再需要任何“坏”的objectID时,试着改变它们并强制它们直到得到你喜欢的那个;)
您更新文档时遇到的问题必须有其他原因,但您提供的详细信息并未包含提示可能出现的问题。
答案 1 :(得分:2)
这只是一个巧合,因为任何十六进制字符abcdef
都可以出现在ObjectID值的任何位置,偶尔也可以组成一个有趣的词,如坏,死,牛肉等。