у меня есть коллекция messages
со следующими документамиQuery сгруппированы по двум своп полей
{
"_id" : ObjectId("5164218f359f109fd4000012"),
"receiver_id" : ObjectId("5164211e359f109fd4000004"),
"sender_id" : ObjectId("5162de8a359f10cbf700000c"),
"body" : "Hello Billy!!!",
"readed" : false,
"updated_at" : ISODate("2013-04-09T14:11:27.17Z"),
"created_at" : ISODate("2013-04-09T14:11:27.17Z")
}
Мне нужно сделать запрос на получение последних сообщений (не имеет значения получили или отослано) для данного пользователя (сгруппированные по reciever_id + sender_id) и отсортированы по created_at.
Чтобы лучше объяснить вопрос, пример того, как я сделал это в SQL:
SELECT DISTINCT ON (sender_id+receiver_id) * FROM messages
ORDER by (sender_id+receiver_id), created_at DESC
WHERE sender_id = given_user or receiver_id = given_user
Я не понимаю, как решить эту проблему с mondodb.
С помощью вашего пути № 3 и суррогатного поля вы можете использовать команду [distinct()] (http://docs.mongodb.org/manual/reference/command/distinct/) в этом поле вместо 'найти()'. – Stennie
Путь № 2 с '$ group: {_id: {sender:" $ sender_id ", получатель:" $ receiver_id "}}' кажется, не работает, потому что когда поля меняются, это делает новый объект в результате. – ole
@Stennie - вы правы, просто исправьте – Dewfy