MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Liệt kê tin nhắn cuối cùng của mỗi cuộc trò chuyện, liên quan đến người dùng, trong MongoDB

Chào mừng bạn đến với Ngăn xếp tràn. Đó là một câu hỏi khá, bạn đã đăng. Vui lòng cho phép tôi có đặc quyền giúp đỡ bạn theo cách mà tôi có thể.

Đây là một lệnh tổng hợp có thể được chạy trong trình bao mongo. Vui lòng tìm lời giải thích nội dòng.

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"}
    }
}
])

Bạn có thể chạy phần bên dưới trên 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 4.2 Quản lý &Giám sát mà không cần Lockin của nhà cung cấp

  2. 8 cách để bắt đầu một ngày trong MongoDB

  3. Mô hình thích hợp cho các lược đồ lồng nhau trong Mongoose / MongoDB là gì?

  4. $ filter bên trong $ project MongoDB Sử dụng Dữ liệu Mùa xuân

  5. Meteor Subscribe không cập nhật thứ tự sắp xếp của bộ sưu tập