2013-05-31 1 views
1

Может ли объект MongoDB содержать только числа?Может ли объект MongoDB содержать только числа?

Существует кусок кода в библиотеке, что я использую, что делает следующее:

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

И в результате он выбрасывая запись в моей БД с ObjectId из «512417805115179054000022» потому что он содержит только числа.

Все остальные записи имеет ObjectId, содержащий по меньшей мере один альфа-символ, такой как «51241740511517a25b000017»

Это проблема с функцией, что она предполагает ObjectId никогда не может содержать только цифры, когда это на самом деле это возможно , или это проблема более низкого уровня с драйвером или чем-то, что создало ObjectId с только числовыми символами по ошибке?

+0

http://docs.mongodb.org/manual/reference/object-id/ Пример, который вы опубликовали, отлично работает как ObjectId в оболочке MongoDB. Похоже на проблему с драйвером. – WiredPrairie

+0

какую библиотеку вы используете? о, конечно, я вижу, что это CakePHP. –

+0

Да, его CakePHP, хотя этот конкретный код находится в плагине datasource MongoDB https://github.com/ichikaway/cakephp-mongodb/ Я поместил запрос на втягивание, чтобы изменить это сейчас – user698883

ответ

1

ObjectId - это BSON, и вы видите представление HEXADecimal. Поэтому да, правильно предположить, что некоторые идентификаторы не будут иметь букв.

3

Регулярное выражение, используемое для проверки inside MongoDB идентификатор объекта является /^[0-9a-fA-F]{24}$/

Это означает, что объект идентификатор может содержать как цифры, так и из 0-9 заглавных и строчных букв из a-f. И идентификатор всегда будет содержать 24 символов. Таким образом, идентификатор объекта с только номерами можно использовать как идентификатор объекта только с буквами.

+0

нет, это не особенно вероятно при все, что у вас будет ObjectId со всеми буквами, по крайней мере, еще не 45 лет (так как первые четыре байта представляют собой временную метку). –

 Смежные вопросы

  • Нет связанных вопросов^_^