Хранение вторичных документов в MongoDB doc - PullRequest
1 голос
/ 21 ноября 2011

Скажем, у User2 есть эти объекты данных, они хранятся в объектах User2.objects как массив объектов.

User2:{objects:[{object1},{object2},{object3}]} 

Если кому-то другому, кроме User2, нужно запросить эти данные, так же как User1 нужен любой из тех объектов, которые к ним относятся. Тогда он должен быть разбит на собственные коллекции в MongoDB db, верно?

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

Я должен разбить эти объекты на их собственные коллекции? Затем я могу просто проиндексировать идентификаторы пользователей, и каждый пользователь может один раз запросить свой идентификатор.

Извините, если этот вопрос сбивает с толку, я немного растерялся.

1 Ответ

5 голосов
/ 22 ноября 2011

Похоже, что может быть некоторая путаница между структурой документа Mongo и использованием аутентификации с MongoDB.

Документация по настройке аутентификации пользователя для базы данных Mongo приведена здесь: http://www.mongodb.org/display/DOCS/Security+and+Authentication

Если пользователю 2 необходимо выполнить запрос к коллекции, созданной пользователем 1, то пользователь 2 должениметь учетную запись в базе данных, в которой находится эта коллекция, и должна быть надлежащим образом аутентифицирована.

Предоставленный пример документа также немного сбивает с толку.Лучше использовать имена ключей, которые будут одинаковыми во всех документах.Например:

{userName:"user1", name:"Marc"},
{userName:"user2", name:"Jeff"},
{userName:"user3", name:"Steve"}

предпочтительнее

{user1:"Marc"},
{user2:"Jeff"},
{user3:"Steve"}

Во втором примере имя пользователя (user1, user2 и т. Д.) Должно быть известно, чтобы узнать имяпользователя.MongoDB не поддерживает подстановочные знаки в запросах.

Предпочтительна следующая структура документа:

{
user: "User2", 
objects:[object1,object2,object3]
},
{
user: "User1", 
objects:[object1,object2,object3]
}

Все объекты, созданные пользователем1, могут быть получены с помощью следующего запроса:

> db.<your collection name>.find({user: "User1"}, {objects:1})

Для получения дополнительной информациив структуре документа MongoDB я рекомендую прочитать следующее:

http://www.mongodb.org/display/DOCS/Schema+Design - Отличное введение в способ хранения данных в MongoDB, включая примеры документов, передовые практики и введение в индексирование.

Надеемся, что вышеизложенное поможет вам выбрать правильную схему с точки зрения выбора схемы для вашей коллекции, создания пользователей и настройки разрешений.Аутентификация - это одна из более продвинутых функций MongoDB, поэтому я бы хотел сосредоточиться на создании эффективной схемы и правильной организации ваших данных, прежде чем беспокоиться об аутентификации.

Если у вас есть какие-либо дополнительные вопросы по этим темам или что-либо еще, связанное с MongoDB, Сообщество здесь, чтобы помочь!Удачи!

...