Mongo: multiply distinct с условием. Как осуществить? Приветствую всех.
Есть документ с записями вида:{
"recipient": "Josh",
"sender": "Mike"
}
Каждая запись - это определенное сообщение от одного пользователя другому. Моя цель - получить уникальный список людей, с которыми общался пользователь (писал им или просто получал сообщения).
Есть два запроса:contacts_recipient = db.test_collection.distinct(
"recipient",
{"$or": [{"recipient": sender}, {"sender": sender}]
})
contacts_sender = db.test_collection.distinct(
"sender",
{"$or": [{"recipient": sender}, {"sender": sender}]
})
Когда я попытался обьеденить их в один, то получилось следующее:result = db.test_collection.aggregate([
{"$match": {"$or": [{"recipient": sender}, {"sender": sender}]}},
{"$group": {"_id": {
"$cond": {
"if": {
"sender": {"$eq": ["$sender", sender]}
},
"then": "$recipient",
"else": "$sender"}
}}}
])
Но это не работает. Почему?

21 Авг 2019 в 06:22
177 +1
0
Ответы
1

В вашем коде агрегации вы неправильно используете оператор $cond. Он принимает три аргумента: условие, значение при истине условия и значение при лжи условия. В вашем случае, вы пытаетесь использовать {"sender": {"$eq": ["$sender", sender]} как условие, но это неправильный синтаксис.

Вместо этого, вы можете использовать оператор $project для проецирования нового поля, которое будет содержать уникальные имена пользователей после этапа $match.

Пример кода может выглядеть следующим образом:

result = db.test_collection.aggregate([
{"$match": {"$or": [{"recipient": sender}, {"sender": sender}]}},
{"$project": {
"conversation_partner": {
"$cond": {
"if": {"$eq": ["$sender", sender]},
"then": "$recipient",
"else": "$sender"
}
}
}},
{"$group": {"_id": "$conversation_partner"}}
])

Этот код должен вернуть уникальный список пользователей, с которыми пользователь общался (писал или получал сообщения).

20 Апр в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 683 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир