MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да получите последно съобщение от чат разговор в mongodb

Проблемът е как се съхраняват съобщенията .

Съхранени данни:

от потребител 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 }] 

MongoPlayground




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Съвпадение с подниз в агрегирането на mongodb

  2. Връзката към несъществуващ mongodb сървър не хвърля изключение

  3. mongodb $where заявка за извличане на съдържание на поддокумент

  4. Pymongo - ValueError:NaTType не поддържа utcoffset при използване на insert_many

  5. Множество опити за инстанция на сървъра, докато се изпълнява шега