2016-07-08 5 views
0

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

class User 
    include Mongoid::Document 
    embeds_one :homepage 
end 

class Homepage 
    include Mongoid::Document 
    embedded_in :user 
end 

В этом примере пользователь и домашняя страница является отношение один-к-одному. В СУБД есть ключ подтверждения в таблице домашней страницы. В монго можно встроить главную страницу в пользователя. Таким образом, мы можем запрашивать пользователей, таких как User.all; однако мы не можем запрашивать домашние страницы точно так же, как Homepage.all.

Возможно has_one макрос - это то, что я хочу. Я бы разработал несколько apis для пользователей, таких как /users; с другой стороны, я бы также разработал некоторые apis для домашних страниц, например /homepages. Однако, если я установил has_one :homepage в модели пользователя, я потерял такие дополнения: я не могу запрашивать пользователей или домашние страницы в соответствии с полями как пользователя, так и главной страницы.

ответ

0

Если вы хотите получить доступ к Homepage документам с верхнего уровня, вам необходимо иметь собственную коллекцию. Когда мы внедряем документ внутри другого, он не сохраняется в отдельной коллекции, а хранится в самом родительском документе.

Таким образом, я думаю, вы должны иметь

class User 
    include Mongoid::Document 
    has_one :homepage 
end 

class Homepage 
    include Mongoid::Document 
    belongs_to :user 
end 

Тогда вы будете иметь возможность запросить Homepage документы на user_id, но не других областях User.

+0

e ~ наконец, я упомянул макрос 'has_one' ~ ~ – Run

Смежные вопросы