2010-06-24 2 views
1

EDIT: получается, что это НЕ проблема .. pfew! phpMOadmin не может отображать bigint (возможно, параметры сервера Apache меня не волнуют) .. не mongoDB не может сэкономить ... u.kodingen.com/1fMs5Z я запросил у CLI, и он возвращается просто отлично! извините mongodb.mongodb не вставляет большое целое правильно (твит id)


, когда я вставляю твит к mongodb, это id, например. 16906830606 становится -274549723

Наши серверы 64 бит, я использую драйвер php mongo.

это полный код вставки,

$content = file_get_contents("http://search.twitter.com/search.json?q=worldcup"); 
$decoded = json_decode($content,true); 
    $c = new Mongo("mongodb://x:[email protected]:27017"); 
    foreach($decoded['results'] as $tweet) 
    { 
    $tweet['_id'] = $tweet['id']; 
    $c->db->tweets->insert($tweet); 
    } 

Вот как это экономит: http://u.kodingen.com/1fKw6E

Если я заставляю его как String,

$tweet['_id'] = "" . $tweet['id']; 

, то это правильно: http://u.kodingen.com/1fKy8g

Я хочу знать, почему это происходит, и что еще я ould беспокоиться о MongoDB, пока вы на нем :) только начинаете здесь ..

+0

я нашел это в то же время: http://groups.google.com/group/mongodb-user/browse_thread/thread/fe05de77d93905f4/b8eee19fa475569c?lnk=gst&q=bigint#b8eee19fa475569c – Devrim

ответ

2

Поле _id, которое обычно хранит ObjectID, составляет 12 байт. 64-разрядное целое число составляет 8 байтов. Очевидно, это должно быть каким-то образом преобразовано. Как кажется, не очень хорошо.

Тот факт, что the timestamp and counter fields must be stored big endian также может быть в игре.

Я бы не использовал идентификатор tweet как ObjectID, так как вы не можете быть уверены, что завтра не добавят пару цифр.

+0

Привет, Jonas, thx. он также не может хранить любые большие ints в массиве либо ... check in_reply_to_status_id http://u.kodingen.com/1fLW7t Я не хочу проверять свой массив перед вставкой и отличать целые числа к строкам. – Devrim

+0

Хм, это гораздо худшая проблема! –

+0

получается, что это НЕ проблема .. pfew! phpMOadmin не может отображать bigint .. не mongoDB не может сэкономить ... http://u.kodingen.com/1fMs5Z, который я запросил из CLI, и он возвращается jsut отлично! – Devrim

0

использовать ini_set ('mongo.native_long', 1); это будет хранить уры целочисленных данных в LontInt