亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Golang 和 mgo 從 Collection MongoDB 中獲取元素

使用 Golang 和 mgo 從 Collection MongoDB 中獲取元素

Go
慕容3067478 2021-12-20 10:12:51
我的任務是寫與歷史的聊天。因此,為了創建歷史記錄,我需要將每條消息發送到 Mongodb,當我進行下一次連接時,我需要獲取所有消息,并通過循環發送到所有連接到聊天的客戶端這是我的 ChatServer 的代碼func ChatServer(ws *websocket.Conn) {// Connecting to MongoDB, collection Historysession, err := mgo.Dial("mongodb://******:*******@ds045795.mongolab.com:45795/catalog")if err != nil {    panic(err)}defer session.Close()session.SetMode(mgo.Monotonic, true)c := session.DB("catalog").C("History")// fmt.Println(c.Find())// Adding clients to the mapclientId := ws.RemoteAddr().String()defer ws.Close()clients[ws] = true// Loop for receiving msgfor {    var msg string    // If can not read msg - delete client from map    if err := websocket.Message.Receive(ws, &msg); err != nil {        delete(clients, ws)        return    }    sendAll(msg)    err = c.Insert(&Connect{clientId, msg})    if err != nil {        log.Fatal(err)    }}}所以我的問題是從集合中按順序獲取所有元素。我不知道該怎么做,因為在文檔中找不到正確的功能。也許你還有其他優惠?
查看完整描述

1 回答

?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

首先,我同意上面的評論者 - 您應該在Connect結構中添加時間戳。但即使沒有它,您也可以按 ObjectID 對您的條目進行排序,因為它是時間戳的一部分。是的,這是一種非常骯臟的方式,如果您使用分片或將數據庫傳輸到另一臺服務器可能會導致問題,但在您的情況下(單個 Mongolab 實例)可能會使用類似的東西(我不知道您的結構,所以“ip”和“message "只是假設)


var connects []Connect

c.Find(bson.M{"ip": "127.0.0.1"}).Sort("-_id").Limit(50).All(&connects) // 50 entries in desc order


for _, connect := range connects {

    log.Println(connect.Message)

}

但真的給你Connect這樣的時間增加時間


package main


import (

    "fmt"

    "gopkg.in/mgo.v2"

    "gopkg.in/mgo.v2/bson"

    "log"

    "time"

)


type Connect struct {

    Ip      string

    Message string

    Ts      time.Time

}


func main() {

    session, err := mgo.Dial("mongodb://souser:[email protected]:55855/catalog")


    if err != nil {

        panic(err)

    }

    defer session.Close()

    session.SetMode(mgo.Monotonic, true)


    c := session.DB("catalog").C("History")


    for i := 0; i < 100; i++ {

        c.Insert(&Connect{"127.0.0.2", fmt.Sprintf("Test message #%d", i), time.Now()})

        if err != nil {

            log.Fatal(err)

        }

    }


    var connects []Connect

    c.Find(bson.M{"ip": "127.0.0.2"}).Sort("-ts").Limit(50).All(&connects)


    for _, connect := range connects {

        log.Println(connect.Message)

    }

}


查看完整回答
反對 回復 2021-12-20
  • 1 回答
  • 0 關注
  • 181 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號