2013-06-06 4 views
0

Я новичок в MongoDB и, как мне интересно, если прикован запрос как следующий возможно (несколько, как присоединиться):Монго DB прикован запрос

db.places.insert({ 
"_id": original_id 
"place_name": "Broadway Center" 
"url": "bc.example.net"}) 

db.people.insert({ 
"name": "Erin" 
"places_id": original_id 
"url": "bc.example.net/Erin"}) 

Так дали строку названия места, я хочу, чтобы выбрать людей, связанных с этим местом. Но коллекция людей ссылается только на идентификатор места, а не на название места.

+1

MongoDB НЕ ДОПУСКАЕТСЯ ... – Sammaye

ответ

2

Вы не можете использовать соединения в MongoDB.

Идиоматическое решение извлекает все place_ids за это place_name из вашей коллекции мест, а затем используйте place_ids для запроса в вашей коллекции людей.

Другой вариант держит, например, places в people коллекции (это имеет смысл для меня, чем people внутри places коллекции, но, конечно, это зависит от вашего домена). Но тогда вы должны принять во внимание, что в случае изменения только одного места вы должны изменить все документы людей, которые имеют определенное место. Если люди и места находятся в разных коллекциях, этого не происходит, поэтому это зависит от того, есть ли у нас статические данные или нет, и если мы хотим оптимизировать поиск или обновления.

+0

или поместите людей в свои места и сохраните их в одной коллекции, или в местах людей, или и тех и других, заранее узнайте свои вопросы! денормализация стоит увеличения производительности. – joschua011

+0

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

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