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

Изброяване на последното съобщение от всеки разговор, включващ потребител, в MongoDB

Добре дошли в препълването на стека. Достоен въпрос, публикувахте. Моля, позволете ми да се възползвам от привилегията да ви помогна по начина, по който мога.

Това е команда за агрегиране, която може да се изпълнява в mongo shell. Моля, намерете обяснението в текста.

db.collection.aggregate([
//match all those records which involve Wood.
{$match:{$or:[{"to":"wood"},{"from":"wood"}]}},
// sort all the messages by descending order
{$sort:{time:-1}},
{
    // Now we need to group messages together, based on the to and from field.
    // We generate a key - "last_message_between", with the value being a concatenation
    // result of the values in to and from field.
    // Now, Messages from Wood to billy and Billy to wood should be treated under a single group right.
    // To achieve that, we do a small trick to make the result contain the name coming last
    // alphabetically, first. So our key for all the Messages from Wood to Billy and Billy to Wood would be 
    // "Wood and Billy".
    // And then we just display the first document that appears in the group, that would be the 
    // latest Message.
    $group:{"_id":{
    "last_message_between":{
        $cond:[
            {
                $gt:[
                {$substr:["$to",0,1]},
                {$substr:["$from",0,1]}]
            },
            {$concat:["$to"," and ","$from"]},
            {$concat:["$from"," and ","$to"]}
        ]
    }
    },"message":{$first:"$$ROOT"}
    }
}
])

Можете да стартирате следното на mongoose.

Collection.aggregate(
{$match:{$or:[{"to":"wood"},{"from":"wood"}]}},
{$sort:{time:-1}},
{
    $group:{"_id":{
    "last_message_between":{
        $cond:[
            {
                $gt:[
                {$substr:["$to",0,1]},
                {$substr:["$from",0,1]}]
            },
            {$concat:["$to"," and ","$from"]},
            {$concat:["$from"," and ","$to"]}
        ]
    }
    },"message":{$first:"$$ROOT"}
    }
},
function(err, res)
{
    if (err) return handleError(err);
    console.log(res);
}
)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Кой е най-добрият начин за съхраняване на дати в MongoDB?

  2. Търсене на низ със специални символи в документ на MongoDB

  3. Справяне с бавни заявки в MongoDB

  4. MongoDB:Сървърът има предупреждения при стартиране

  5. Mongo DB намира всички записи с най-висока стойност в зависимост от ключово поле