Mongoid on RoR3: 1) как вернуть определенное поле в запрос? 2) для чего требуется обратное?
Ну, название самоочевидно. Но, позвольте мне уточнить немного лучше.
Прежде всего, я использую Mongoid, Gem для использования MongoDB с приложениями rails.
# 1) У меня есть большая коллекция, в которой есть информация о карте. Карта содержит много плиток, и каждая плитка ссылается на коллекцию ландшафта, коллекцию пользователей и имеет некоторую другую информацию. Поэтому, если я получу все плитки с карты, у меня будет действительно большая структура. Тем не менее, я хотел бы кэшировать структуру, которая содержит матрицу с только информацией о местности. Для этого я выбираю все плитки (и, следовательно, всю их ненужную информацию) и использую только поле местности. Как я могу выбрать ТОЛЬКО поле местности на Монгоиде? Я попробовал работать с select несколькими способами, но мне это не удалось... (кстати, только ради примера я обращаюсь к массиву плиток с линией "Map.first.tiles" ).
# 2) Хорошо.. Я уже здесь, так почему бы не спросить об этом. Должен ли я использовать поля inverse_of в своих моделях? Я не использовал его нигде, и все, кажется, работает отлично. Я не понимаю, почему это необходимо, так как довольно просто определить, где их поставить, и чем они являются обратными.
Спасибо заранее.
Фернандо.
Ответы
Ответ 1
В общем случае, чтобы выбрать только один или несколько атрибутов в мангоидном запросе:
Map.only(:name).all
Я бы не стал обращать внимание на inverse_only, за исключением случаев, когда Mongoid нуждался в помощи в выяснении классов. В общем, не нужно.
Если вам нужно вернуть только определенные атрибуты на встроенный документ, вам нужно использовать полный путь:
Map.first.tiles
=> [#<Tile _id: 4e1e486042f5bc06e7000002, name: "Earth", distance: 34>]
Map.only("tiles.name").first.tiles
=> [#<Tile _id: 4e1e488742f5bc06e7000003, name: "Earth", distance: nil>]
Ответ 2
Вы также можете использовать pluck
Критерии # срывать
Band.all.pluck(:name)
Получить все значения для предоставленного поля. Возвращает ноль для отмены полей и для несуществующих полей.
источник: https://docs.mongodb.com/ecosystem/tutorial/mongoid-queries/