mongodb неправильно вставляет большое целое число (идентификатор твита) - PullRequest
1 голос
/ 24 июня 2010

РЕДАКТИРОВАТЬ: оказывается, это не проблема .. pfew! phpMOadmin не может отображать bigint (вероятно, настройки сервера apache, мне было все равно) .. не mongoDB не может сохранить ... u.kodingen.com/1fMs5Z Я запросил из CLI, и он возвращается просто отлично! извини mongodb.


когда я вставляю твит в 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:pass@mng.vps.kodingen.com: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

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

Ответы [ 2 ]

2 голосов
/ 24 июня 2010

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

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

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

0 голосов
/ 21 июня 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...