Хранение / работа с тегами в mongodb для системы управления документами - PullRequest
2 голосов
/ 25 июля 2011

Так что я работаю над любимым проектом, где храню различные текстовые файлы.Я настроил свое приложение так, чтобы теги сохранялись в виде строки в одной из моих коллекций, например:

теги: «Linux Apache WSGI»

Хранение и поиск по ним работают простохорошо, но мой вопрос возникает, когда я хочу сделать что-то вроде облака тегов, сосчитать все различные теги или создать систему динамического выбора на основе тегов, как лучше разбить их для работы?Или я должен хранить их как-то иначе?

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

Я использую pymongo для взаимодействия с моей базой данных.

1 Ответ

6 голосов
/ 25 июля 2011

Или я должен хранить их другим способом?

Стандартный способ хранения тегов - хранить их в виде массива. В вашем случае БД будет выглядеть примерно так:

tags: ['linux', 'apached', 'wsgi']

... как лучше разбить их на работу?

Это то, для чего предназначена Карта / Уменьшение . Это эффективно "сканирует каждую запись". Выходные данные Map / Reduce - это еще одна коллекция, к которой вы можете обращаться.

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

...