mongodb储存即时聊天的时候如何取出用户聊天列表
仅有的幸福
仅有的幸福 2017-05-02 09:20:07
0
1
608
{
        "_id" : ObjectId("576cfd363325ffaa1dbdde15"),
        "current_uid" : "5",
        "to_uid" : "3",
        "content" : "你大爷"
    },
    {
        "_id" : ObjectId("576cfd6e3325ff501e07f4ae"),
        "current_uid" : "5",
        "to_uid" : "3",
        "content" : "郭德纲"
    },
    {
        "_id" : ObjectId("576cfe753325ff501ea76603"),
        "current_uid" : "5",
        "to_uid" : "4",
        "content" : "325235"
    }

存的时候如上所示,想要获取用户ID为5的这个跟哪些人聊过天,也就是3和4这2个用户,现在想要获取包括content的信息,也就是跟该用户最新的一条记录,比如3这个用户,我要获取的就是郭德纲这个content而不是上面那条,这个应该怎么查询,初学mongodb,球帮助

仅有的幸福
仅有的幸福

membalas semua(1)
洪涛

Ini adalah masalah kumpulan TOP N yang sangat tipikal, dan terdapat ungkapan yang sepadan dalam pangkalan data SQL, seperti

SQLServer.
ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

Ia boleh diselesaikan dengan menggunakan aggregation dalam MongoDB. aggregation ialah topik yang besar, dan saya tidak dapat menerangkan semuanya di sini Anda hanya boleh menyemak dokumentasi untuk memahami pelbagai operator yang digunakan di bawah.

db.chat.aggregate([
    {$match: {current_uid: "5"}},
    {$sort: {_id: -1}},
    {$group: {_id: {current_uid: "$current_uid", to_uid: "$to_uid"}, content: {$first: "$content"}}}
])

Beberapa penjelasan:

  1. Menggunakan {$sort: {_id: -1}} sebenarnya adalah susunan kronologi terbalik. _id mengandungi masa, dan kebanyakan masa pengisihannya boleh dianggap sebagai masa pengisihan;

  2. mendapat elemen pertama. Bagaimana jika anda ingin mengambil elemen n pertama?

    +$first boleh; $push$slice

  3. Bagaimanakah pertanyaan di atas boleh dibuat dengan lebih pantas?
  4. db.chat.createIndex({current_uid: 1, _id: 1})

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan