Запросы различаются с MongoMapper - PullRequest
2 голосов
/ 01 февраля 2012

Как мне запросить отчетливый с MongoMapper? Мой запрос:

subscribedToThread = Comment.where(:subscribe_thread => 1).all

Но это вернет много объектов с одинаковым user_id. Мне нужно вернуть только отчетливый user_id. Это возможно?

Ответы [ 3 ]

7 голосов
/ 02 февраля 2012

Я думаю, вам нужно будет перейти к драйверу ruby, чтобы сделать это, поскольку я не думаю, что вы можете сделать это с самим MongoMapper:

subscribedToThread = Comment.collection.distinct("user_id", {:subscribe_thread => 1})

Вызов метода коллекции в модели возвращает коллекцию, как это было бы предоставлено драйвером Ruby напрямую, поэтому вы можете выполнить отдельный запрос, используя следующий синтаксис:

collection.distinct(key, query = nil)

Подробнее об этом можно прочитать здесь

2 голосов
/ 02 февраля 2012

Да, вы можете сделать это:

subscribedToThread = Comment.where(:subscribe_thread => 1).fields(:user_id).all.compact!.unique!

Это будет ноль каждого поля, кроме user_id, который вы затем uniq!, т.е. вы удаляете все двойные числа, а затем compact! all nil

http://mongomapper.com/documentation/plugins/querying.html#fields

1 голос
/ 12 сентября 2013

Попробуйте это

subscribedToThread = Comment.where(:subscribe_thread => 1).fields(:user_id).collect(&:user_id).uniq 

Он покажет вам список уникальных user_id

...