У меня есть следующие названия структур. Обсуждение. Я хочу получить последнее сообщение в обсуждении пользователем. Я попытался выполнить неполный запрос Spring MongoDB, не могли бы вы сообщить мне, как получить только одно сообщение (отсортированное по последнему моменту) для обсуждения или найти обсуждения, в которых пользователь является получателем последнего сообщения в разговоре.запрос Mongodb Aggregate (Java/Spring) для извлечения последнего подэлемента
Aggregation aggr = newAggregation(
match(Criteria.where("participants").regex(Pattern.compile(userid))),
unwind("messages"),
match(new Criteria().orOperator(Criteria.where("messages.touserId").is(userid),Criteria.where("messages.fromuserId").is(userid))),
sort(Direction.DESC, "messages.lastModifiedDate"),
group("_id").push("messages").as("messages"),
project("_id","messages")
);
{
"_id": {
"$oid": "57c2d7c8e4b0bcf181b7db0a"
},
"_class": "xxxxx",
"participants": [
"56893b22e4b0e8d1c6a25783",
"56893bb6e4b0e8d1c6a25785",
"577c2f6ee4b09ccb44d14415"
],
"messages": [
{
"_id": {
"$oid": "57c2d7c8e4b0bcf181b7db08"
},
"fromuserId": "577c2f6ee4b09ccb44d14415",
"fromuser": "xxxx",
"touserId": "56893b22e4b0e8d1c6a25783",
"touser": "Bloreshop1",
"message": "Check Product Price",
"isMute": false,
"index": 1,
"createDate": {
"$date": "2016-08-28T12:23:36.037Z"
},
"lastModifiedDate": {
"$date": "2016-08-28T12:23:36.037Z"
},
"createdBy": "xxxx",
"lastModifiedBy": "xxxxx"
},
{
"_id": {
"$oid": "57c2d7c8e4b0bcf181b7db09"
},
"fromuserId": "577c2f6ee4b09ccb44d14415",
"fromuser": "xxxxxx",
"touserId": "56893bb6e4b0e8d1c6a25785",
"touser": "Bloreshop2",
"message": "Check Product Price",
"isMute": false,
"index": 2,
"createDate": {
"$date": "2016-08-28T12:23:36.302Z"
},
"lastModifiedDate": {
"$date": "2016-08-28T12:23:36.302Z"
},
"createdBy": "xxxxx",
"lastModifiedBy": "xxx"
}
],
"discussionTopic": "Check Product Price",
"messageCount": 2,
"createDate": {
"$date": "2016-08-28T12:23:36.318Z"
},
"lastModifiedDate": {
"$date": "2016-08-28T12:23:36.318Z"
},
"createdBy": "xxxx",
"lastModifiedBy": "xxxxx"
}
Это структура для обсуждения. Сообщение от пользователя и пользователя означает, что этот пользователь отправляет или получает сообщение соответственно. И я использую запрос OR, чтобы найти сообщение, в котором пользователь отправляет или получает сообщение. Меня интересуют сообщения, в которых этот пользователь получает последнее сообщение. – Debopam
В то время как ответ Veerams ниже, вероятно, устраняет вашу проблему с технической точки зрения, оптимальным решением для вашей проблемы было бы скорее резервировать последнее сообщение в вашем документе и обновлять его с помощью $ set при добавлении нового сообщения. Избегайте агрегации, если можете. – mtj