Как установить _id как 32-битное целое число?

В настоящее время я загружаю данные в MongoDB, а позже мне нужно будет перенести эти данные в отдельное приложение. Это приложение требует, чтобы поле _id было 32-битным целым числом.

Не забудьте явно установить для атрибута _id в результирующем документе уникальные 32-битные целые числа. источник

Я использую pymongo для вставки документов в коллекцию.

def parse_tweet(in_t):
    t = {}
    t["text"] = in_t["text"]
    t["shape"] = in_t["coordinates"]["coordinates"][0], in_t["coordinates"]["coordinates"][1]
    return t

Это дает мне ожидаемые документы:

{
  "_id" : ObjectId("50a0de04f26afb14f4bba03d"),
  "text" : "hello world",
  "shape" : [144.9557834, -37.8208589],
}

Как я могу явно указать значение _id как 32-битное целое число?
Я не собираюсь хранить более 6 миллионов документов.


person jakc    schedule 12.11.2012    source источник


Ответы (1)


Просто сгенерируйте идентификатор и передайте его. Id может быть любым (кроме массива).

def parse_tweet(in_t):
    t = {}
    t["_id"] = get_me_an_int32_id
    t["text"] = in_t["text"]
    t["shape"] = in_t["coordinates"]["coordinates"][0], in_t["coordinates"]["coordinates"][1]
    return t

О его уникальности вам придется позаботиться самостоятельно. MongoDB только гарантирует, что вы не храните повторяющиеся значения. А вот где вы получаете уникальные значения - это ваши проблемы.

Вот несколько идей: Как создать поле с автоинкрементом .

person Sergio Tulentsev    schedule 12.11.2012
comment
pymongo может обрабатывать это по-другому (я PHP), поскольку этого нет в документах: api.mongodb.org/python/current/api/index.html однако хранилище MongoDB по умолчанию не является строгим int 32 как таковым, если ваше приложение не ориентировано на обработку этого, оно может сломаться как таковое. убедится, что он использует эквивалент php.net/manual/en/class.mongoint32. php или просто закодируйте приложение для обработки этого небольшого аспекта Mongo. - person Sammaye; 12.11.2012
comment
Не могли бы вы поделиться частью логики функции get_me_an_int32_id? Я смотрю на вашу ссылку, но не уверен в самом элегантном счетчике для Python? - person jakc; 13.11.2012
comment
Обычно лучший способ, если у вас есть контроль над приложением, — это закодировать приложение для преобразования всех чисел, собранных из MongoDB, в безопасные целые числа, используя функцию int(), как показано здесь: stackoverflow.com/questions/3387655/ - person Sammaye; 13.11.2012