У меня есть простая реализация социальной сети с MongoDB. Моя схема выглядит следующим образом:Запрос социальной сети с MongoDB
User
_id
name
Friend
_id
user
friend
Post
_id
user
timestamp
text
Я пытаюсь использовать метод aggregate
, чтобы получить список последних сообщений из всех моих друзей, но я хотел бы, чтобы сгруппировать вместе последовательные сообщения из того же пользователя. Так предполагая, что у меня есть 3 друзей, и они имеют следующие должности:
{"user": "user1", timestamp: 1476200010, text: "hello1"}
{"user": "user2", timestamp: 1476200009, text: "hello2"}
{"user": "user2", timestamp: 1476200008, text: "hello3"}
{"user": "user3", timestamp: 1476200007, text: "hello4"}
{"user": "user2", timestamp: 1476200006, text: "hello5"}
{"user": "user2", timestamp: 1476200005, text: "hello6"}
{"user": "user1", timestamp: 1476200004, text: "hello7"}
{"user": "user1", timestamp: 1476200003, text: "hello8"}
Я хотел бы в итоге получить следующее:
{"user": "user1", timestamp: 1476200010, text: "hello1"}
{"user": "user2", timestamp: 1476200009, text: "hello2"}
{"user": "user3", timestamp: 1476200007, text: "hello4"}
{"user": "user2", timestamp: 1476200006, text: "hello5"}
{"user": "user1", timestamp: 1476200004, text: "hello7"}
я немного застрял с моим запросом, либо помощь оценена:
db.Post.aggregate([
{$sort: {timestamp: -1}},
{$lookup: {from: 'Friend', localField: '_id', foreignField: 'friend', as: 'friend'}},
{$match: {'friend.user': current_user}},
???
{$limit: 100},
])
В связи с этим вопросом 'aggregate' не поддерживает операции с соседними документами, поэтому я думаю, что вам потребуется выполнить последовательную сортировку сообщений в коде приложения. – JohnnyHK