Генерация _id против ObjectId автогенерации в MongoDB

mongodb database-design permalinks identifier

5851 просмотра

1 ответ

Я разрабатываю приложение, которое создает постоянные ссылки. Я не уверен, как сохранить документы в MondoDB. Две стратегии:

  1. Автогенерация ObjectId

    MongoDB автоматически генерирует _id. Мне нужно создать индекс на permalinkполе, потому что я получаю информацию по постоянной ссылке. Также я могу получить доступ ко времени создания ObjectId, используя getTimestamp()метод, поэтому datetimeполя кажутся избыточными, но если я удаляю это поле, мне нужно два вызова MongoDB, один для получения информации, а другой для получения метки времени.

    {
      "_id": ObjectId("5210a64f846cb004b5000001"),
      "permalink": "ca8W7mc0ZUx43bxTuSGN",
      "data": "a lot of stuff",
      "datetime": ISODate("2013-08-18T11:47:43.460+-100")
    }
    
  2. Создать _id

    Я генерирую _idс постоянной ссылкой.

    {
      "_id": "ca8W7mc0ZUx43bxTuSGN",
      "data": "a lot of stuff",
      "datetime": ISODate("2013-08-18T11:47:43.460+-100")
    }
    

Я не вижу никакого преимущества в использовании ObjectIds. Я что-то пропустил?

Автор: Arturo Herrero Источник Размещён: 12.11.2019 09:40

Ответы (1)


6 плюса

Решение

ObjectIdОни существуют для ситуаций, когда у вас нет уникального ключа для каждого документа в коллекции. Они уникальны, так что вам не нужно беспокоиться о конфликтах, и они достаточно хорошо разбираются в больших развертываниях без особого беспокойства (у них есть свои плюсы и минусы, читайте больше здесь ).

ObjectIdТакже содержит временную метку клиента , где ObjectIdбыл сгенерирован (если сервер БД не сконфигурирован для генерации ключей). При этом, как вы заметили, вы можете использовать отметку времени для выполнения некоторых операций с датами. Однако, если вы планируете использовать Aggregation Framework, вы обнаружите, что ObjectIdв настоящее время вы не можете использовать ни в каких операциях с датами ( выпуск ). Если вы хотите использовать AF, вам понадобится второе поле, которое содержит дату, к сожалению, вдвойне сохраняя ее с ObjectIdвнутренним значением.

Если вы можете быть уверены, _idчто генерируемый ObjectIdвами файл уникален, тогда нет особых причин использовать его в вашей структуре данных.

Автор: WiredPrairie Размещён: 18.08.2013 04:26
Вопросы из категории :
32x32