国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

mongodb儲(chǔ)存即時(shí)聊天的時(shí)候如何取出用戶聊天列表
僅有的幸福
僅有的幸福 2017-05-02 09:20:07
0
1
762
{
        "_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"
    }

存的時(shí)候如上所示,想要獲取用戶ID為5的這個(gè)跟哪些人聊過天,也就是3和4這2個(gè)用戶,現(xiàn)在想要獲取包括content的信息,也就是跟該用戶最新的一條記錄,比如3這個(gè)用戶,我要獲取的就是郭德綱這個(gè)content而不是上面那條,這個(gè)應(yīng)該怎么查詢,初學(xué)mongodb,球幫助

僅有的幸福
僅有的幸福

répondre à tous(1)
洪濤

Il s'agit d'un problème de regroupement très typique TOP N, et il existe des expressions correspondantes dans les bases de données SQL, telles que

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

Ce problème peut être résolu en utilisant aggregation dans MongoDB. aggregation est un gros sujet, et je ne peux pas expliquer tout le contenu ici. Vous pouvez uniquement consulter la documentation pour comprendre les différents opérateurs utilisés ci-dessous.

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

Quelques explications?:

  1. L'utilisation de {$sort: {_id: -1}} est en fait l'ordre chronologique inverse. _id contient du temps, et la plupart du temps son tri peut être considéré comme du temps de tri

  2. $first obtient le premier élément. Et si vous souhaitez prendre les n premiers éléments?? $push+$slice c'est bien

  3. Comment la requête ci-dessus peut-elle être effectuée plus rapidement?? db.chat.createIndex({current_uid: 1, _id: 1})

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal