Intereting Posts
Перевести запрос формы HTML в php-массив Apache показывает php-код вместо выполнения mysqli и AJAX Примеры уязвимого кода PHP? PHP добавляет ключи для декодирования, а затем кодирует данные JSON вызов метода объекта объекта с помощью call_user_func in_array работает неправильно при работе со строками Ошибка анализа: синтаксическая ошибка, неожиданный T_ELSE, и я не знаю, почему Почему объект PHP принимает членов, которые упоминались только при вызове? mysql_fetch_array () / mysql_fetch_assoc () / mysql_fetch_row () ожидает, что параметр 1 будет ресурсом Как легко добавить поддержку posix для PHP с помощью yum? лучше ли убеждать / закодировать пользовательский ввод, прежде чем хранить его в базе данных или сохранить его, как он есть в базе данных, и избежать его при извлечении? Возможно ли запустить XMPP на основе PHP и Javascript многопользовательской сетевой игры в FaceBook? php exec: не возвращает результат Как я могу предложить ответ AJAX POST пользователю в качестве загрузки?

MongoDB: кросс-сборные запросы

Предполагая такую ​​установку:

blogposts { title:"Example", slug:"example-post" tags: ["foo", "bar"] }, { title:"Example2", slug:"example2" tags: ["foo"] } news { headline: "Test" slug: "test-news" tags: ["bar"] } 

Я знаю, что могу получить все сообщения в блоге с определенным тегом:

 $cursor = $blogposts->find(array('tags' => 'bar')); 

но есть ли способ запросить сразу несколько коллекций, чтобы получить все документы с тегом? Например, чтобы показать весь контент с помощью метки «bar».

Невозможно сразу запросить несколько коллекций.

Наилучшим подходом было бы хранить все документы в одной коллекции, если документы имеют одинаковый общий тип. В вашем примере как сообщения в блогах, так и новости являются типом «контента».

 content { type: "blogpost", title: "Example", slug: "example-post" tags: ["foo", "bar"] }, { type: "blogpost", title: "Example2", slug: "example2" tags: ["foo"] }, { type: "news", headline: "Test" slug: "test-news" tags: ["bar"] } 

Такой подход использует преимущества схемы MongoDB без схемы; хотя оба типа документов могут иметь разные свойства, все они могут храниться в одной коллекции. Это позволяет вам запрашивать весь ваш контент или только некоторые типы контента, в зависимости от ваших требований.

Начиная с Mongodb 3.2, теперь можно использовать этап $ lookup в конвейере агрегации, позволяющий «присоединиться» к другой коллекции.

выполняет левое внешнее соединение с незащищенной коллекцией в той же базе данных для фильтрации в документах из «объединенной» коллекции для обработки. Этап $ lookup выполняет совпадение равенства между полем из входных документов с полем из документов «объединенной» коллекции.

Источник