Проблемът е как се съхраняват
съобщенията .
Съхранени данни:
от потребител 123 и до потребител 456 от потребител 456 и до потребител 123
Така че, когато го групирате, логично те са еднакви , но не за групиране
.
Решение:
Трябва да гарантираме, че подателят/получателят идва винаги по един и същи начин
<предварителен код>1. Създайте масив, където съхраняваме подател/получател2. Подредете този масив `[123, 456] [456, 123] => [123,456], [123,456]`3. Групиране по този подреден масив (по метода на Mongo:$project, $unwind, $sort, $group - push)db.chats.aggregate([ { $match:{ $or:[ { "toUser":123 }, { "fromUser":123 } ] } }, { "$project":{ toUser:1, fromUser:1, съобщение:1, timeStamp:1, fromToUser:[ "$fromUser", "$toUser" ] } }, { $unwind:"$fromToUser" }, { $sort:{ "fromToUser":1 } }, { $group:{ _id:"$_id", "fromToUser":{ $push:"$fromToUser" }, "fromUser":{ "$first":"$fromUser" }, "toUser":{ "$first":"$toUser" }, "message":{ "$first":"$message" }, "timeStamp":{ "$first":"$timeStamp" } } }, { "$sort" :{ "timeStamp":-1 } }, { "$group":{ "_id":"$fromToUser", "fromUser":{ "$first":"$fromUser" }, "toUser":{ "$ first":"$toUser" }, "message":{ "$first":"$message" }, "timeStamp":{ "$first":"$timeStamp" } } }])
Резултат
[ { "_id":[ 101, 123 ], "fromUser":123, "message":"Kk", "timeStamp":"2019-10-09 18:31:12:1212 PM +05:30", "toUser":101 }, { "_id":[ 123, 456 ], "fromUser":123, "message":"2", "timeStamp":"2019-10-09 18:31:21:2121 PM +05:30", "toUser":456 }]