2013-08-24 4 views
1

Я хочу хранить твиты на MongoDB, а затем найти/заказать их по id, API Twitter предоставляет два типа идентификаторов для твита, один как тип номера, а другой тип строки потому что JavaScript (mongo/node) может иметь только 53-битные целые числа, а идентификаторы Twitter используют больше.Сортировка Twitter tweet id string как номер на MongoDB

Если я храню идентификаторы в виде чисел, идентификатор округляется и теряется, но я могу сортировать и находить идентификаторы с критериями как «больше чем» и «меньше».

Если я присваиваю идентификаторы в виде строк, идентификационный номер сохраняется, как и должен, но я не могу найти (выбрать) идентификаторы с критериями «меньше» или «больше», а сортировка - беспорядок, потому что это сортируя «поле» как строку, поэтому «10» отображается перед «3», потому что в начале «1».

Мне нужно хранить этот идентификатор, и я хочу, чтобы иметь возможность выбрать их с критериями, как «меньше/больше/равно /, чем» и сортирует их, что «поле» как номера ...

Как могу ли я достичь этого?

Большое спасибо!

ответ

1

Используйте NumberLong для хранения 64-битных целых чисел.

+0

Отлично, что работает с консоли, но как насчет node.js/mongoose? Я нашел эту библиотеку, но я не совсем уверен: https://npmjs.org/package/mongoose-long –

+1

@RodrigoPolo Я не эксперт node.js, но это - http://stackoverflow.com/questions/ 8617272/how-to-store-large-numbers-in-mongodb-with-node-js должен помочь. – bsd

+0

Благодаря вам я уже прочитал этот вопрос, а затем реализовал его, и он работает как шарм, только загружая этот модуль и меняя модель/схему, больше не меняет код, поэтому я очень доволен, большое спасибо. –

0

Это всегда можно предварять номер с нулями и сохранить его в виде строки, как

000000010 
000000003 

, так что вы можете хранить длинные идентификаторы и использовать вас больше/меньше/равные условия

+1

Хранение и сравнение длин более эффективно, чем строки. Я согласен, что префикс нулей может помочь. – bsd

+0

@bsd мой ответ не является серебряной пулей :), это может быть полезно для некоторой ситуации, когда у вас очень много цифр, например –

+0

Хотя это ломается, как только идентификатор становится достаточно длинным, чтобы потребовалось больше цифр для сохранения в виде строки, чем у вас есть используемый как дополнение. – binki

0

Если вы используете PHP, use:

ini_set('mongo.native_long', 1);