Идиоматичный способ хранения единственного «первоклассного» списка в MongoDB? - PullRequest
2 голосов
/ 16 августа 2010

У меня есть специальный список (своего рода очередь, как в структуре данных, а не как рабочая очередь), которую я хочу сохранить в MongoDB. Мне нужно часто обращаться к этому единственному списку и манипулировать им в своем приложении, а у меня нет нескольких списков одного типа.

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

Я бы также предпочел не разбивать список на несколько документов в коллекции, так как это всего лишь короткий, простой список (он ограничен 400 элементами, а каждый элемент - это просто небольшой фрагмент текста, поэтому нет риска превышения лимита документов 4 МБ).

Я думал о нескольких способах сделать это, но ни один из них не кажется идеальным. Пожалуйста, дайте мне знать, если вы подходите правильно, или я что-то упускаю.

  1. Установите пользовательский _id для документа и жестко закодируйте его в моем приложении.
  2. Создайте коллекцию для документа, которая будет содержать только этот один документ, чтобы я мог получить его, просто получив первый документ в этой коллекции. (Это кажется вздорным)
  3. Используйте поле типа document_name: 'my_special_list' и получите документ, запросив document_name. Я бы предпочел не делать этого, поскольку мне не нужны другие документы, подобные этому, поэтому только один документ будет иметь это поле document_name.
  4. Используйте коллекцию документов, каждый из которых содержит поле индекса и поле содержимого элемента, и используйте map-reduction, чтобы получить из него список, или что-то в этом роде. Я бы предпочел этого не делать, поскольку просто получить список BSON, манипулировать им и сохранить его в документе намного проще.
  5. Используйте для этого другую технологию, так как MongoDB для нее не подходит.

1 Ответ

1 голос
/ 16 августа 2010

Документация MongoDB гласит:

Пользователи могут использовать свои собственные соглашения для создания идентификаторов; значение _id может быть любого типа, если оно уникально.

Так что вариант 1 был бы таким, каким я бы это сделал.

Обновление

Вариант 2 - это, как вы сказали, своего рода взлом.
Вариант 3 вводит дополнительное поле для чего-то, что вы также можете использовать поле _id.
Вариант 4 представляет собой комплексное решение простой проблемы.

...