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

mongodb儲(chǔ)存即時(shí)聊天的時(shí)候如何取出用戶聊天列表
僅有的幸福
僅有的幸福 2017-05-02 09:20:07
[MongoDB討論組]
{
        "_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è)跟哪些人聊過(guò)天,也就是3和4這2個(gè)用戶,現(xiàn)在想要獲取包括content的信息,也就是跟該用戶最新的一條記錄,比如3這個(gè)用戶,我要獲取的就是郭德綱這個(gè)content而不是上面那條,這個(gè)應(yīng)該怎么查詢,初學(xué)mongodb,球幫助

僅有的幸福
僅有的幸福

全部回復(fù)(1)
PHP中文網(wǎng)

這是一個(gè)很典型的分組TOP N問(wèn)題,放到SQL數(shù)據(jù)庫(kù)里面也有相應(yīng)的表達(dá)方式,比如SQLServer的

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

MongoDB里面用aggregation就可以解決了。aggregation是個(gè)很大的話題,這里沒(méi)法講解全部?jī)?nèi)容,下面用到的各種操作符只能自己去查下文檔理解。

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

幾點(diǎn)解釋:

  1. 使用{$sort: {_id: -1}}其實(shí)就是時(shí)間倒序。_id里面包含了時(shí)間,對(duì)它的排序大部分時(shí)候可以認(rèn)為是對(duì)時(shí)間的排序;

  2. $first取到了第一個(gè)元素。如果想取頭n個(gè)元素怎么辦?$push+$slice就可以了;

  3. 以上查詢?cè)趺茨芨欤?code>db.chat.createIndex({current_uid: 1, _id: 1})

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見(jiàn)反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長(zhǎng)!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)