Mongo C# 操作(元素 数组 )

2 篇文章 0 订阅
1 篇文章 0 订阅

先看下我的Bson结构:

{
  "_id" : ObjectId("56e2642e6f29584fa01d02be"),
  "deviceId" : "25a3928850c31fffbb470fb18d082c42191d9eb3",
  "avatarName" : "CCC",
  "avatarIndex" : 2,
  "avatarLevel" : 1,
  "avatarCreateTime" : "2016/3/11 14:22:38",
  "economy" : {
    "glod" : -2236
  },
  "friend" : [["Q1Q"], ["23EE#"]],
  "message" : {
    "QQQ" : [{
        "content" : "你大爷的?",
        "sendTime" : ISODate("2016-03-15T02:23:27.743Z")
      }, {
        "content" : "你大爷的?",
        "sendTime" : ISODate("2016-03-15T02:23:32.706Z")
      }]
  }
}

具体操作如下,

   

        #region //设备登录信息
        /// <summary>
        /// 设备登录服务器  插入时间
        /// </summary>
        /// <param name="deviceId">设备ID</param>
        /// <param name="devicename">设备类型</param>
        /// <returns></returns>
        public bool DeviceLogin(string deviceId, string devicename)
        {

            MongoClient mongoClient = new MongoClient(connection);
            MongoServer mongoServer = mongoClient.GetServer();
            MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
            MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
            try
            {

                IMongoQuery device = Query.EQ("deviceID", deviceId); 
                BsonDocument bson = mongoCollection.FindOne(device);
                if (bson == null)
                {
                    BsonArray loginDetail = new BsonArray { DateTime.Now.ToString() };
                    BsonDocument doc = new BsonDocument();
                    doc.Add("deviceID", deviceId);
                    doc.Add("deviceType", devicename);
                    doc.Add("registerTime", DateTime.Now.ToString());
                    doc.Add("LoginCount", 1);
                    doc.Add("loginDetail", loginDetail);

                    Console.WriteLine("{0}: 创建设备账号! 设备ID :{1},  机型 :{2} ", collectionName, deviceId, devicename);
                    return mongoCollection.Insert(doc).Ok;
                }
                else
                {
                    IMongoQuery query = Query.EQ("deviceID", deviceId);
                    UpdateDocument update = new UpdateDocument { { "$inc",  new QueryDocument{ {"LoginCount", 1 } } },
                                                                 { "$addToSet", new QueryDocument{  { "loginDetail", DateTime.Now.ToString() } } }
                                                                 };
                    Console.WriteLine("{0}: 登录设备账号! 设备ID :{1},  机型 :{2} ", collectionName, deviceId, devicename);
                    return mongoCollection.Update(query, update).Ok;

                }
            }
            catch (Exception e)
            {
                stateMessage = e.ToString();
                Console.WriteLine("数据库操作错误! 集合名称{0}", collectionName);
                Console.WriteLine( stateMessage );
                return false;
            }

        }

        /// <summary>
        /// 设置玩家等级
        /// </summary>
        /// <param name="avatarName"></param>
        /// <param name="level"></param>
        /// <returns></returns>
        public bool UpdateAvatarLevel(string avatarName, int level)
        {
            MongoClient mongoClient = new MongoClient(connection);
            MongoServer mongoServer = mongoClient.GetServer();
            MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
            MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
            try
            {
                IMongoQuery query = Query.EQ("avatarName", avatarName);
                UpdateDocument update = new UpdateDocument { { "$inc", new QueryDocument { { "avatarLevel", level } } } };
                if (mongoCollection.Update(query, update).Ok)
                {
                    Console.WriteLine("{0}角色:{1},设置角色等级成功 ", collectionName, avatarName);
                    return true;
                }
                else
                {
                    Console.WriteLine("{0}角色:{1},设置角色等级失败 ", collectionName, avatarName);
                    return false;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("{0}角色:{1},设置角色等级异常, ErrorMessage:{3} ", collectionName, avatarName, e.ToString());
                stateMessage = e.ToString();
            }
            return false;

        }
        #endregion

        #region//玩家具体信息
        /// <summary>
        /// 创建玩家角色
        /// </summary>
        /// <param name="deviceId">设备ID</param>
        /// <param name="avatarName">角色昵称</param>
        /// <param name="avatarIndex">角色ID</param>
        /// <param name="avatrLevel">角色等级</param>
        /// <returns></returns>
        public bool CreateAvatr(string deviceId, string avatarName, byte avatarIndex, short avatrLevel)
        {

            MongoClient mongoClient = new MongoClient(connection);
            MongoServer mongoServer = mongoClient.GetServer();
            MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
            MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
            try
            {
                IMongoQuery device = Query.EQ("avatarName", avatarName);
                BsonDocument bson = mongoCollection.FindOne(device);
                if (bson == null)
                {
                    BsonDocument doc = new BsonDocument();
                    doc.Add("deviceId", deviceId);
                    doc.Add("avatarName", avatarName);
                    doc.Add("avatarIndex", avatarIndex);
                    doc.Add("avatarLevel", avatrLevel);
                    doc.Add("avatarCreateTime", DateTime.Now.ToString());
                    Console.WriteLine("{0}:设备:{1},创建角色:昵称:{2},索引:{3},等级:{4} ", collectionName, deviceId, avatarName, avatarIndex, avatrLevel);
                    return mongoCollection.Insert(doc).Ok;
                }
                else
                {
                    Console.WriteLine("{0}:设备:{1},创建角色失败:昵称:{2},索引:{3},等级:{4}, ErrorMessage:{5} ", collectionName, deviceId, avatarName, avatarIndex, avatrLevel, "昵称已经存在");
                    stateMessage = "昵称已经存在";
                    return false;
                }

            }
            catch (Exception e)
            {
                Console.WriteLine("{0}:设备:{1},创建角色异常:昵称:{2},索引:{3},等级:{4}, ErrorMessage:{5} ", collectionName, deviceId, avatarName, avatarIndex, avatrLevel, e.ToString());
                stateMessage = e.ToString();
                return false;
            }

        }

        // <summary>
        // 返回角色列表
        // </summary>
        // <param name="deviceId"></param>
        // <returns></returns>
        public List<Avatars> GetAvatarList(string deviceId)
        {
 
            List<Avatars> avatarlist = new List<Avatars>();
            MongoClient mongoClient = new MongoClient(connection);
            MongoServer mongoServer = mongoClient.GetServer();
            MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
            MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);

            try
            {
                IMongoQuery query = Query.EQ("deviceId", deviceId);
                FieldsDocument fddoc = new FieldsDocument();
                fddoc.Add("avatarName", 1);
                fddoc.Add("avatarIndex", 1);
                fddoc.Add("avatarLevel", 1);
                MongoCursor<BsonDocument> doc = mongoCollection.Find(query).SetFields(fddoc);

                foreach (BsonDocument bs in doc)
                {
                    Avatars avatar = new Avatars();
                    if (bs.Contains("avatarName"))
                        avatar.avatarName = (string)bs["avatarName"];
                    if (bs.Contains("avatarIndex"))
                        avatar.avatarIndex = (Byte)bs["avatarIndex"];
                    if (bs.Contains("avatarLevel"))
                        avatar.avatarLevel = (short)bs["avatarLevel"];
                    avatarlist.Add(avatar);
                }
                Console.WriteLine("{0}设备:{1},返回角色列表, 角色个数{2} ", collectionName, deviceId, avatarlist.Count);

            }
            catch (Exception e)
            {
                Console.WriteLine("{0}设备:{1},返回角色列表异常, ErrorMessage:{3} ", collectionName, deviceId, e.ToString());
                stateMessage = e.ToString();
            }

            return avatarlist;
        }

        #endregion

        #region //角色任务

        /// <summary>
        /// 获取玩家的任务
        /// </summary>
        /// <param name="avatarName"></param>
        /// <returns></returns>
        public List<TaskDetail> GetAvatarTask(string avatarName)
        {

            MongoClient mongoClient = new MongoClient(connection);
            MongoServer mongoServer = mongoClient.GetServer();
            MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
            MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
            List<TaskDetail> taskDetail = new List<TaskDetail>();
            try
            {
                //IMongoQuery query = Query.EQ("avatarName", avatarName);
                IMongoQuery query = Query.And(Query.EQ("avatarName", avatarName), Query.Exists("task"));
                BsonArray bson = mongoCollection.FindOne(query)["task"].AsBsonArray;
                if ( bson != null)
                {
                    foreach (BsonDocument bdoc in bson)
                    {
                        TaskDetail task = new TaskDetail();
                        if (bdoc.Contains("taskType"))
                            task.taskType = ((Byte)bdoc["taskType"]);
                        if (bdoc.Contains("taskID"))
                            task.taskID = (Byte)bdoc["taskID"];
                        if (bdoc.Contains("taskState"))
                            task.taskState = ((Byte)bdoc["taskState"]);
                        if (bdoc.Contains("lastTime"))
                            task.lastTime = bdoc["lastTime"].AsDateTime;
                        taskDetail.Add(task);
                    }

                }

                Console.WriteLine("{0}角色:{1},返回角色任务列表,个数为{2} ", collectionName, avatarName, taskDetail.Count);

            }
            catch (Exception e)
            {
                //Console.WriteLine("{0}角色:{1},返回角色任务列表异常, ErrorMessage:{3} ", collectionName, avatarName, e.ToString());
                stateMessage = e.ToString();
                Console.WriteLine( stateMessage );
            }
            return taskDetail;

        }
        /// <summary>
        /// 删除一个角色
        /// </summary>
        /// <param name="avatartName"></param>
        /// <returns></returns>
        public bool RemoveAvatar(string avatartName)
        {
            List<Avatars> avatarlist = new List<Avatars>();
            MongoClient mongoClient = new MongoClient(connection);
            MongoServer mongoServer = mongoClient.GetServer();
            MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
            MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);

            try
            {
                IMongoQuery query = Query.EQ("avatarName", avatartName);
                if (mongoCollection.Remove(query).Ok)
                {
                    Console.WriteLine("{0}设备:{1},删除角色列表成功 ", collectionName, avatartName);
                    return true;
                }
                else
                {
                    Console.WriteLine("{0}设备:{1},删除角色列表失败 ", collectionName, avatartName);
                    return false;
                }
            }
            catch (Exception e)
            {
                 Console.WriteLine("{0}设备:{1},删除角色列表异常, ErrorMessage:{3} ", collectionName, avatartName, e.ToString());
                stateMessage = e.ToString();
                return false;
            }

        }

        public bool SetAvatarTask(string avatarName, TaskDetail task)
        {

            MongoClient mongoClient = new MongoClient(connection);
            MongoServer mongoServer = mongoClient.GetServer();
            MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
            MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);

            try
            {
                BsonDocument doc = new BsonDocument();
                doc.Add("taskID",    task.taskID);
                doc.Add("taskType",  task.taskType);
                doc.Add("taskState", task.taskState);
                doc.Add("lastTime",  task.lastTime);
 
                IMongoQuery query = Query.EQ("avatarName", avatarName);
                UpdateDocument update = new UpdateDocument { { "$addToSet", new QueryDocument { { "task", doc } } } };

                Console.WriteLine("{0}: 设置任务成功! 角色名称 avatarName:{1} 任务类型 task.taskType:{2} ", collectionName, avatarName, task.taskType);
                return mongoCollection.Update(query, update).Ok;

            }
            catch (Exception e)
            {
                stateMessage = e.ToString();
                Console.WriteLine("数据库操作错误! 集合名称{0}", collectionName);
                return false;
            }

        }

        public bool UpdateAvatarTask(string avatarName, TaskDetail task)
        {

            MongoClient mongoClient = new MongoClient(connection);
            MongoServer mongoServer = mongoClient.GetServer();
            MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
            //mongoServer.RequestStart( mongoDatabase );
            MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);

            try
            {
                BsonDocument doc = new BsonDocument();
                doc.Add("taskID", task.taskID);
                doc.Add("taskType", task.taskType);
                doc.Add("taskState", task.taskState);
                doc.Add("lastTime", task.lastTime);

                //IMongoQuery query =  Query.EQ( "avatarName", avatarName );
                IMongoQuery query = Query.And( Query.EQ("avatarName", avatarName), Query.EQ("task.taskID", task.taskID ));
                QueryDocument queryDoc = new QueryDocument { { "avatarName", avatarName }, { "task.taskID", task.taskID } };

                //UpdateDocument update = new UpdateDocument { { "$set",  new QueryDocument { {  "task.$.taskState", task.taskState  } } },
                                                              
                //                                            };
                //UpdateDocument update = new UpdateDocument { { "$set",  new QueryDocument { {  "task.$.taskType", task.taskType  } } },
                //                                                        new QueryDocument { {  "task.$.taskState", task.taskState  } } ,
                //                                                        new QueryDocument { {  "task.$.lastTime",  task.lastTime  } } ,
                // 

                UpdateDocument updates = new UpdateDocument();
                updates.Add("task.$.taskType",  task.taskType);
                updates.Add("task.$.taskState", task.taskState);
                updates.Add("task.$.lastTime",  task.lastTime);

                UpdateDocument update = new UpdateDocument { { "$set", updates }};
               
               // mongoServer.RequestDone();
                if (mongoCollection.Update(query, update).Ok)
                {
                    Console.WriteLine("{0}: 设置任务成功!  任务类型 task.taskType:{1} ", collectionName, task.taskType);
                    return true ;
                }
                else
                {
                    Console.WriteLine("{0}: 设置任务失败!  任务类型 task.taskType:{1} ", collectionName, task.taskType);
                    return true;
                }
               

            }
            catch (Exception e)
            {
                stateMessage = e.ToString();
                Console.WriteLine("数据库操作错误! 集合名称{0}", collectionName);
                Console.WriteLine(stateMessage);
               // mongoServer.RequestDone();
                return false;
            }

           

        }

        #endregion

        #region//经济系统
        /// <summary>
        /// 获取经济系统数据
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public Economy GetEconomy(string avatarName)
        {

            MongoClient mongoClient = new MongoClient(connection);
            MongoServer mongoServer = mongoClient.GetServer();
            MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
            MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
            Economy economy = new Economy();

            try
            {
                IMongoQuery query = Query.And(Query.EQ("avatarName", avatarName), Query.Exists("economy"));
                BsonDocument doc = mongoCollection.FindOne(query)["economy"].AsBsonDocument;

                if (doc != null)
                {
                    if (doc.Contains("glod"))
                        economy.glod = (int)doc["glod"].AsInt32;
                    if (doc.Contains("glodTotal"))
                        economy.glodTotal = (int)doc["glodTotal"].AsInt32;
                    if (doc.Contains("silver"))
                        economy.silver = (int)doc["silver"].AsInt32;
                    if (doc.Contains("silverTotal"))
                        economy.silverTotal = (int)doc["silverTotal"].AsInt32;
                    return economy; 
                }

               Console.WriteLine("{0}角色:{1},返回经济系统 ", collectionName, avatarName);

            }
            catch (Exception e)
            {
                //
                stateMessage = e.ToString();
                Console.WriteLine("{0}角色:{1},返回经济系统异常, ErrorMessage:{3} ", collectionName, avatarName, stateMessage);
            }
            return null;
        }


        /// <summary>
        /// 设置经济系统数据
        /// </summary>
        /// <param name="name"></param>
        /// <param name="economy"></param>
        /// <returns></returns>
        public bool SetEconomy(string avatarName, Economy economy)
        {
            MongoClient mongoClient = new MongoClient(connection);
            MongoServer mongoServer = mongoClient.GetServer();
            MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
            MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);

            try
            {
                BsonDocument doc = new BsonDocument();
                doc.Add("glod", economy.glod);
                doc.Add("glodTotal", economy.glodTotal);
                doc.Add("silver", economy.silver);
                doc.Add("silverTotal", economy.silverTotal);

                IMongoQuery query = Query.EQ("avatarName", avatarName);
                UpdateDocument update = new UpdateDocument { { "$set", new QueryDocument { { "economy", doc } } } };
         
                if ( mongoCollection.Update(query, update).Ok  )
                {
                  Console.WriteLine("{0}角色:{1},设置经济系统成功 ", collectionName, avatarName);
                  return true;
                }else
                {
                  Console.WriteLine("{0}角色:{1},设置经济系统失败 ", collectionName, avatarName);
                  return false;
                }
                 

            }
            catch (Exception e)
            {
                Console.WriteLine("{0}角色:{1},返回经济系统异常, ErrorMessage:{3} ", collectionName, avatarName, e.ToString());
                stateMessage = e.ToString();
                return false;
            }

           
        }

        /// <summary>
        /// 消耗充值金币
        /// </summary>
        /// <param name="avatarName"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        public bool ExpendEconomy( string avatarName, int count )
        {

            MongoClient mongoClient = new MongoClient(connection);
            MongoServer mongoServer = mongoClient.GetServer();
            MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
            MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
            try
            {

                IMongoQuery query = Query.EQ("avatarName", avatarName);
                BsonDocument doc = new BsonDocument();
                doc.Add();
                UpdateDocument update = new UpdateDocument { { "$inc", new QueryDocument { { "economy.glod", count } } } };
                if (mongoCollection.Update(query, update).Ok)
                {
                    Console.WriteLine("{0}角色:{1},设置经济系统成功 ", collectionName, avatarName);
                    return true;
                }
                else 
                {
                    Console.WriteLine("{0}角色:{1},设置经济系统失败 ", collectionName, avatarName);
                    return false;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("{0}角色:{1},返回经济系统异常, ErrorMessage:{3} ", collectionName, avatarName, e.ToString());
                stateMessage = e.ToString();
            }
            return false;
        }

        #endregion

        #region//好友系统

        /// <summary>
        /// 获取好友列表
        /// </summary>
        /// <param name="avatarName">获取好友列表</param>
        /// <returns>玩家数组</returns>
        public string[] GetFriendList(string avatarName)
        {
            MongoClient mongoClient = new MongoClient(connection);
            MongoServer mongoServer = mongoClient.GetServer();
            MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
            MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
            List<string> friend = new List<string>();
            try
            {
                IMongoQuery query = Query.And(Query.EQ("avatarName", avatarName), Query.Exists("friend"));
                BsonArray doc = mongoCollection.FindOne(query)["friend"].AsBsonArray;
                Console.WriteLine( doc.Count );

                if (doc != null)
                {
                    string[] friendName = new string[doc.Count];
                    for (int i = 0; i < doc.Count; i ++ )
                    {
                        friendName[i] = doc[i].ToString();
                    }
                    return friendName;
                }
                return null;

            }
            catch (Exception e)
            {
                //
                stateMessage = e.ToString();
                //Console.WriteLine("{0}角色:{1},返回经济系统异常, ErrorMessage:{3} ", collectionName, avatarName, stateMessage);
            }
            return null;
        }
        /// <summary>
        /// 添加好友
        /// </summary>
        /// <param name="friend"></param>
        /// <param name="avatarName"></param>
        /// <returns></returns>
        public bool AddFriend(string friend, string avatarName)
        {
            MongoClient mongoClient = new MongoClient(connection);
            MongoServer mongoServer = mongoClient.GetServer();
            MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
            MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
            try
            {
                IMongoQuery query = Query.EQ("avatarName", avatarName) ;
                BsonArray friendArray = new BsonArray();
                friendArray.Add( friend );
                UpdateDocument update = new UpdateDocument { { "$addToSet", new QueryDocument { { "friend", friendArray } } } };

                if (mongoCollection.Update(query, update).Ok)
                {
                    Console.WriteLine("{0}角色:{1},添加好友成功 ", collectionName, avatarName);
                    return true;
                }
                else
                {
                    Console.WriteLine("{0}角色:{1},添加好友失败 ", collectionName, avatarName);
                    return false;
                }

            }
            catch (Exception e)
            {
                stateMessage = e.ToString();
                Console.WriteLine("{0}角色:{1},添加好友异常, ErrorMessage:{3} ", collectionName, avatarName, stateMessage);
            }
            return false;
        }

        /// <summary>
        /// 删除好友
        /// </summary>
        /// <param name="friendName"></param>
        /// <param name="tagName"></param>
        /// <returns></returns>
        public bool RemoveFriend(string friend, string avatarName)
        {
            MongoClient mongoClient = new MongoClient(connection);
            MongoServer mongoServer = mongoClient.GetServer();
            MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
            MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
            try
            {
                IMongoQuery query = Query.And(Query.EQ("avatarName", avatarName), Query.Exists("friend"));
                BsonArray friendArray = new BsonArray();
                friendArray.Add(friend);
                UpdateDocument update = new UpdateDocument { { "$pull", new QueryDocument { { "friend", friendArray } } } };

                if (mongoCollection.Update(query, update).Ok)
                {
                    Console.WriteLine("{0}角色:{1},删除好友成功 ", collectionName, avatarName);
                    return true;
                }
                else
                {
                    Console.WriteLine("{0}角色:{1},删除好友失败 ", collectionName, avatarName);
                    return false;
                }

            }
            catch (Exception e)
            {
                stateMessage = e.ToString();
                Console.WriteLine("{0}角色:{1},删除好友异常, ErrorMessage:{3} ", collectionName, avatarName, stateMessage);
            }
            return false;
        }

        #endregion

        #region//离线消息
        /// <summary>
        /// 获取玩家离线消息 并且清空消息队列
        /// </summary>
        /// <param name="avatarName"></param>
        /// <returns></returns>
        public Dictionary<string, List<Message>> GetOffLineMessage(string avatarName)
        {
            MongoClient mongoClient = new MongoClient(connection);
            MongoServer mongoServer = mongoClient.GetServer();
            MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
            MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
            Dictionary<string, List<Message>> msgDict = new Dictionary<string, List<Message>>();
            
            try
            {
                IMongoQuery query = Query.And(Query.EQ("avatarName", avatarName), Query.Exists("message"));
                BsonDocument bson = mongoCollection.FindOne(query)["message"].AsBsonDocument;
                if (bson != null)
                {
                    var bEle = bson.Elements;
                    //List<BsonElement> bElea = (List<BsonElement>) bson.Elements;
                    Console.WriteLine(bEle.GetType());
                    foreach (BsonElement bdoc in bEle)
                    {
                        string msgName = bdoc.Name;
                        BsonArray doc = bdoc.ToBsonDocument()["Value"].AsBsonArray;
                        List<Message> msgList = new List<Message>();
                        foreach (BsonDocument docs in doc)
                        {
                            Message msg = new Message();
                            msg.from = msgName;
                            if (docs.Contains("content"))
                                msg.content = docs["content"].ToString();
                            if (docs.Contains("sendTime"))
                                msg.sendTime = docs["sendTime"].AsDateTime;
                            msgList.Add(msg);
                        }

                        msgDict.Add(msgName, msgList);
                    }

                    UpdateDocument update = new UpdateDocument { { "$unset", new QueryDocument{ {"message", ""} } } };
                    mongoCollection.Update(query, update);
                    return msgDict;

                }
                else
                {
                    return null;
                }
            }
            catch (Exception e)
            {
                stateMessage = e.ToString();
            }
            return null;
          
        }

        /// <summary>
        /// 添加好友离线消息
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        public bool AddOffLineMessage(string avatarName, Message message)
        {

            MongoClient mongoClient = new MongoClient(connection);
            MongoServer mongoServer = mongoClient.GetServer();
            MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName);
            MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName);
            try
            {
                IMongoQuery query = Query.EQ("avatarName", avatarName);
                BsonDocument doc = new BsonDocument();
                doc.Add("content",  message.content );
                doc.Add("sendTime", message.sendTime);
                UpdateDocument update = new UpdateDocument { { "$addToSet", new QueryDocument { { "message." + message.from, doc } } } };



                if (mongoCollection.Update(query, update).Ok)
                {
                    Console.WriteLine("{0}角色:{1},离线消息添加成功 ", collectionName, avatarName);
                    return true;
                }
                else
                {
                    Console.WriteLine("{0}角色:{1},离线消息添加失败 ", collectionName, avatarName);
                    return false;
                }

            }
            catch (Exception e)
            {
                stateMessage = e.ToString();
                Console.WriteLine("{0}角色:{1},添加离线消息添加异常, ErrorMessage:{3} ", collectionName, avatarName, stateMessage);
            }
            return false;
        }
        #endregion



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nicepainkiller

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值