public void RequestAddFriend(string ownerUsername, string friendUsername, string remark, string groupName, string message,
                                     RequestAddFriendUpdateFlags flags)
        {
            var db         = GetDatabase();
            var collection = db.GetCollection("friend_request");
            var queryDoc   = new QueryDocument();

            queryDoc.Add("OwnerUsername", ownerUsername.ToLower());
            queryDoc.Add("FriendUsername", friendUsername.ToLower());

            var cur = collection.Find(queryDoc);

            cur.Limit = 1;

            UpdateDocument updateDoc = new UpdateDocument();

            if (cur.Size() > 0)
            {
                foreach (var item in cur)
                {
                    updateDoc.Add(item);
                }
            }
            else
            {
                updateDoc.Add("OwnerUsername", ownerUsername.ToLower());
                updateDoc.Add("FriendUsername", friendUsername.ToLower());
            }

            if (flags == RequestAddFriendUpdateFlags.UpdateAll || (flags & RequestAddFriendUpdateFlags.UpdateRemark) ==
                RequestAddFriendUpdateFlags.UpdateRemark)
            {
                if (remark == null && updateDoc.Contains("Remark"))
                {
                    updateDoc.Remove("Remark");
                }
                else if (remark != null)
                {
                    updateDoc.Set("Remark", remark);
                }
            }
            if (flags == RequestAddFriendUpdateFlags.UpdateAll || (flags & RequestAddFriendUpdateFlags.UpdateMessage) ==
                RequestAddFriendUpdateFlags.UpdateMessage)
            {
                if (message == null && updateDoc.Contains("Message"))
                {
                    updateDoc.Remove("Message");
                }
                else if (message != null)
                {
                    updateDoc.Set("Message", message);
                }
            }
            if (flags == RequestAddFriendUpdateFlags.UpdateAll || (flags & RequestAddFriendUpdateFlags.UpdateGroup) ==
                RequestAddFriendUpdateFlags.UpdateGroup)
            {
                if (groupName == null && updateDoc.Contains("GroupName"))
                {
                    updateDoc.Remove("GroupName");
                }
                else if (groupName != null)
                {
                    updateDoc.Set("GroupName", groupName);
                }
            }
            updateDoc.Set("Time", DateTime.Now);
            collection.Update(queryDoc, updateDoc, UpdateFlags.Upsert);
        }
        public void RequestAddFriend(string ownerUsername, string friendUsername, string remark, string groupName, string message,
            RequestAddFriendUpdateFlags flags)
        {
            var db = GetDatabase();
            var collection = db.GetCollection("friend_request");
            var queryDoc = new QueryDocument();

            queryDoc.Add("OwnerUsername", ownerUsername.ToLower());
            queryDoc.Add("FriendUsername", friendUsername.ToLower());

            var cur = collection.Find(queryDoc);
            cur.Limit = 1;

            UpdateDocument updateDoc = new UpdateDocument();
            if (cur.Size() > 0)
            {
                foreach (var item in cur)
                    updateDoc.Add(item);
            }
            else
            {
                updateDoc.Add("OwnerUsername", ownerUsername.ToLower());
                updateDoc.Add("FriendUsername", friendUsername.ToLower());
            }

            if (flags == RequestAddFriendUpdateFlags.UpdateAll || (flags & RequestAddFriendUpdateFlags.UpdateRemark) ==
                RequestAddFriendUpdateFlags.UpdateRemark)
                if (remark == null && updateDoc.Contains("Remark"))
                    updateDoc.Remove("Remark");
                else if (remark != null)
                    updateDoc.Set("Remark", remark);
            if (flags == RequestAddFriendUpdateFlags.UpdateAll || (flags & RequestAddFriendUpdateFlags.UpdateMessage) ==
             RequestAddFriendUpdateFlags.UpdateMessage)
                if (message == null && updateDoc.Contains("Message"))
                    updateDoc.Remove("Message");
                else if (message != null)
                    updateDoc.Set("Message", message);
            if (flags == RequestAddFriendUpdateFlags.UpdateAll || (flags & RequestAddFriendUpdateFlags.UpdateGroup) ==
             RequestAddFriendUpdateFlags.UpdateGroup)
                if (groupName == null && updateDoc.Contains("GroupName"))
                    updateDoc.Remove("GroupName");
                else if (groupName != null)
                    updateDoc.Set("GroupName", groupName);
            updateDoc.Set("Time", DateTime.Now);
            collection.Update(queryDoc, updateDoc, UpdateFlags.Upsert);
        }