Mongoid на RoR3: 1) как вернуть конкретное поле по запросу? 2) для чего нужен inverse_of? - PullRequest
16 голосов
/ 14 июля 2011

Ну, заголовок самоочевиден.Но позвольте мне рассказать немного лучше.Прежде всего, я использую Mongoid , Gem для использования MongoDB с приложениями rails.

# 1) У меня большая коллекция, в которой есть информация о карте.Карта включает в себя множество плиток, и каждая плитка ссылается на коллекцию ландшафта, коллекцию пользователей и содержит некоторую другую информацию.Поэтому, если я получу все плитки с карты, у меня будет действительно большая структура.Тем не менее, я хотел бы кэшировать структуру, которая содержит матрицу только с информацией о местности.Чтобы сделать это, я выбираю все плитки (и, следовательно, всю их ненужную информацию) и использую только поле местности.Как выбрать ТОЛЬКО поле местности на Mongoid?Я пытался работать с select несколькими способами, но мне это не удалось .. (кстати, просто для примера, я обращаюсь к массиву плиток с помощью строки "Map.first.tiles").

# 2) Хорошо .. Я уже здесь, так почему бы не спросить это.Должен ли я действительно использовать поля inverse_of в моих моделях?Я нигде не пользовался, и, кажется, все работает отлично.Я не понимаю, зачем это нужно, поскольку довольно просто определить, куда их поместить и к чему они обратны.

Заранее спасибо.Фернандо.

Ответы [ 2 ]

36 голосов
/ 14 июля 2011

Как правило, чтобы выбрать только 1 или более атрибутов в запросе mongoid:

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 голосов
/ 30 мая 2016

Вы также можете использовать pluck

Критерии # срывать

Band.all.pluck(:name)

Получить все значения для предоставленного поля. Возвращает ноль для неустановленного поля и для несуществующих полей.

источник: https://docs.mongodb.com/ecosystem/tutorial/mongoid-queries/

...