1
다음 구조 이름이 있습니다. 토론. 사용자가 토론에서 마지막 메시지를 가져 오려고합니다. 나는 불완전한 Spring MongoDB 질의를 시도했는데, 토론마다 하나의 메시지 (lastmodifieddate로 정렬)를 가져 오는 방법 또는 대화에서 마지막 메시지의 수신자 인 토론을 찾는 방법을 알려 주실 수 있습니까?Mongodb 집계 (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