Я бы пошел на тонкую обертку, основываясь на документах со следующей структурой:
{ _id : short_url , url : long_url }
Вставка нового длинного URL-адреса может быть выполнена за один шаг: программа-оболочка сгенерирует новый _id
, сделает попытку PUT и повторите попытку с новым _id
, пока он не удастся. Это гарантирует, что каждый короткий URL используется только один раз.
Боюсь, что этот подход «создать, попытаться, повторить» - единственная стратегия, которая обеспечивает уникальность, и она не доступна без оболочки.
Если вы хотите, чтобы один и тот же длинный URL повторно использовал тот же короткий URL, вы также можете добавить представление, которое echo(doc.url,null)
, и получить _id
для вашего URL, если он существует. Это означает, что, если несколько клиентов не попытаются добавить один и тот же длинный URL в одно и то же время, для этого длинного URL будет использоваться только один короткий URL.