Задать вопрос
@EpicUsaMan

MongoDB: Как вытащить диалоги из сообщений?

{
_id: 1
from: 12,
to: 24,
msg: "text"
}

Есть такого рода записи в mongo, как найти по одной записи для каждого значения to или from, где искомое значение находится в from или to и получить msg самого последнего элемента с найденными from\to.

Те есть допустим пользователь с id 12, нужно найти по одному сообщению которое писали ему или писал он какому-то пользователю и достать последнее соообщение, и так для каждого пользователя с которым взаимодействовал человек с id 12. (По факту вытащить из сообщений диалоги)
  • Вопрос задан
  • 290 просмотров
Подписаться 1 Сложный Комментировать
Решения вопроса 1
longclaps
@longclaps
Что-нибудь такое:
var a = 12;
db.talks.aggregate([
	{$project:{"_id":1,"from":1, "to":1, "msg":1, "ft":["$from", "$to"]}},
	{$match:{"ft":a}},
	{$unwind: "$ft"},	
	{$match:{"ft":{$ne:a}}},
	{$sort:{"_id":1}},
	{$group: {"_id":"$ft", "orig_id":{$last:"$_id"},"from":{$last:"$from"},
		      "to":{$last:"$to"},"msg":{$last:"$msg"}}},
	{$sort:{"_id":1}},
	{$project:{"_id":"$orig_id","from":1, "to":1, "msg":1}}
]);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
18 дек. 2024, в 12:39
1000 руб./за проект
18 дек. 2024, в 12:37
10000 руб./за проект
18 дек. 2024, в 12:22
5000 руб./за проект