2013-05-31 24 views
1

MongoDB objectid只能包含数字吗?MongoDB objectid是否只包含数字?

有一个在我使用该库中的一段代码执行以下操作:

if (is_int($mixed) || ctype_digit($mixed)) { 
    return; 
} 

这样做的结果是扔掉记录在我的数据库与“512417805115179054000022”的的ObjectId因为它只包含数字。

每隔记录都有至少包含一个字母字符的的ObjectId如“51241740511517a25b000017”

这与它假定一个的ObjectId 不能仅包含数字时,它实际上是可能的功能的问题,或者它是一个驱动程序或创建一个只有数字字符错误的ObjectId的一些较低级别的问题?

+0

http://docs.mongodb.org/manual/reference/object-id/您发布的示例在MongoDB shell中可以很好地作为ObjectId使用。看起来像一个司机问题。 – WiredPrairie

+0

你在使用什么库?哦,别介意,我看到它是CakePHP。 –

+0

是的,它的CakePHP,虽然这个特定的代码是在MongoDB数据源插件https://github.com/ichikaway/cakephp-mongodb/ 我已经提出了一个拉请求来修改这个现在 – user698883

回答

1

ObjectId是BSON,您会看到HEXADecimal表示形式。所以是的,假设某些ID不会有字母是正确的。

3

正则表达式使用inside MongoDB验证对象ID的是/^[0-9a-fA-F]{24}$/

也就是说,对象ID可以从a-f含有0-9和大写或小写字母两个数字。 ID将始终有24个字符。所以只有数字的对象ID和只有字母的对象ID一样可能。

+0

不,它不是特别可能所有你将拥有所有字母的ObjectId,至少不会再过45年(因为前四个字节代表一个时间戳)。 –

相关问题