Раскрытие тайн уникального поля _id (часть 2 из 10)

В прошлый раз мы рассмотрели, как разработать схему документа JSON, которая моделирует данные в вашем приложении. Я не упомянул важную область: _id документа.

Каждый документ Cloudant имеет _id - если вы не укажете его при написании нового документа, Cloudant сгенерирует его для вас. Позволить Cloudant сделать _id за вас - самое простое решение, но в некоторых случаях вы можете захотеть сохранить контроль над полем _id для себя.

Поле _id - это уникальный идентификатор документа в базе данных, и поэтому он проиндексирован. Это означает, что Cloudant может очень быстро извлекать документ с учетом его _id, обращаясь к индексу - без необходимости пролистывать все документы в коллекции, чтобы найти нужный.

первичный индекс, используемый для записи и извлечения документов с помощью поля _id, также сохраняет документы в порядке идентификаторов на диске. Мы можем использовать это в своих интересах при разработке ваших собственных _id значений, поскольку мы можем использовать первичный индекс для выполнения запросов диапазона, например, для поиска документов, в которых _id меньше, больше или находится между предоставленными значениями. См. Конечную точку API GET / db / _all_docs для запроса первичного индекса.

Допустим, мы храним пользовательские объекты в базе данных Cloudant. Было бы совершенно правильно хранить такие документы:

Мы опускаем поле _id и позволяем Cloudant выбрать одно. От нашего имени будет создано что-то вроде e87a03636ee3d9d0943cd1f35f431fe7.

Если мы знаем что-то уникальное о нашем пользователе, например его адрес электронной почты, мы можем изменить документ, чтобы он выглядел так:

Теперь мы сохраняем тип пользователя и адрес электронной почты в поле _id. Это означает, что мы можем использовать первичный индекс, чтобы добавить немного ценности. Мы можем запросить первичный индекс, чтобы получить список всех документов, идентификаторы которых начинаются с user:, и возвращаемый список будет в порядке адресов электронной почты.

Я хочу вернуть свои автоматически увеличивающиеся значения

Если вы привыкли к реляционным базам данных, возможно, вы знакомы с автоинкрементными первичными ключами. Ключ начинается с «1» для первой записи, и число увеличивается каждый раз - просто! С Cloudant вы либо заставляете Cloudant сгенерировать для вас уникальный идентификатор, либо создаете свой собственный. Если вы хотите, чтобы идентификаторы вашего документа были «1», «2», «3» и т. Д., Вы должны отслеживать, где вы находитесь!

Как мне сгенерировать собственный уникальный идентификатор

Существуют библиотеки, которые могут генерировать для вас уникальные идентификаторы, такие как пакет uuid для Node.js:

В качестве альтернативы вы можете попросить Cloudant предоставить вам список идентификаторов с помощью вызова API GET / _uuids.

Могу ли я отредактировать _id, когда он уже есть в базе данных?

Хотя вы можете редактировать тело документа, вы не можете изменить его идентификатор. Вам ничто не мешает удалить ненужный документ и создать новый. Вы даже можете одновременно выполнять операции удаления и вставки, используя POST /db/_bulk_docs запрос.

В следующий раз

В следующем посте мы раскроем тайны токена _rev.

Первоначально опубликовано на medium.com/@glynn_bird 11 мая 2018 г.