diff --git a/src/common/db/model.go b/src/common/db/model.go index f34b4c305..f8be3747a 100644 --- a/src/common/db/model.go +++ b/src/common/db/model.go @@ -22,7 +22,6 @@ func key(dbAddress, dbName string) string { func init() { //mysql init initMysqlDB() - // mongo init mgoDailInfo := &mgo.DialInfo{ Addrs: config.Config.Mongo.DBAddress, Direct: config.Config.Mongo.DBDirect, @@ -40,6 +39,11 @@ func init() { DB.mgoSession = mgoSession DB.mgoSession.SetMode(mgo.Monotonic, true) + c := DB.mgoSession.DB(config.Config.Mongo.DBDatabase).C(cChat) + err = c.EnsureIndexKey("uid") + if err != nil { + panic(err) + } // redis pool init DB.redisPool = &redis.Pool{ MaxIdle: config.Config.Redis.DBMaxIdle, diff --git a/src/common/db/mongoModel.go b/src/common/db/mongoModel.go index 6d315193e..a0fbbfb18 100644 --- a/src/common/db/mongoModel.go +++ b/src/common/db/mongoModel.go @@ -22,6 +22,7 @@ type MsgInfo struct { type UserChat struct { UID string Msg []MsgInfo + BId bson.ObjectId `bson:"bid"` } type GroupMember struct { @@ -155,12 +156,15 @@ func (d *DataBases) SaveUserChat(uid string, sendTime int64, m proto.Message) er log.NewInfo("", "get mgoSession cost time", getCurrentTimestampByMill()-newTime) c := session.DB(config.Config.Mongo.DBDatabase).C(cChat) - + err := c.EnsureIndexKey("uid") + if err != nil { + log.NewError("", "EnsureIndexKey uid failed ", err.Error()) + } n, err := c.Find(bson.M{"uid": uid}).Count() if err != nil { return err } - log.NewInfo("", "find mgo uid cost time", getCurrentTimestampByMill()-newTime) + log.NewInfo("", "find and create index mgo uid cost time", getCurrentTimestampByMill()-newTime) sMsg := MsgInfo{} sMsg.SendTime = sendTime if sMsg.Msg, err = proto.Marshal(m); err != nil {