C#操作MongoDB的簡單實例


  最近比較忙,很久沒更新了(雖然沒人看,也沒人在乎,也要記得be yourself),

  前面分享了一些mongodb的安裝和簡單的語法,今天模仿支付寶首頁的模塊移動功能,用mongo做一個簡單的后台實例。

  one,啟動本地的mongo服務like this.

  two,連接mongo可視化界面,建立PersonModule的文檔集合。

  three,配置默認模塊,我這邊了個公共xml里。

<?xml version="1.0" encoding="utf-8" ?>

<root>
  <model name="HomePage">
    <nodes name="DefaulModule">
      <node id="1" name="轉賬"/>
      <node id="2" name="共享單車"/>
      <node id="3" name="電影票"/>
      <node id="4" name="出行"/>
    </nodes>
  </model >
</root>

  four,正式開工。

    1.初始化首頁模塊。

     /// <summary>
        /// 初始化模塊
        /// </summary>
        public void InitModule()
        {
            var DefaultModule = XmlHelper.GetXmlDic("HomePage", "DefaulModule");
            var personModule = new PersonalModule();
            List<BsonDocument> docs = new List<BsonDocument>();
            //添加id=1,2,3三個人的首頁模塊
            for (var i = 1; i < 4; i++)
            {
                personModule.PersonId = i;
                personModule.Module = DefaultModule;
                //一個人一個人添加
                var json = JsonHelper.SerializeObject(personModule);
                //mongoServer.Insert(collationName, json);
                //批量添加
                BsonDocument document = BsonDocument.Parse(json);
                docs.Add(document);
            }
            //導入mongodb
            mongoServer.ImportBatch("PersonModule", docs);
        }

    2.個人PersonId=1的,添加模塊(Id=5,Name=“余額”)

     /// <summary>
        /// 添加模塊
        /// </summary>
        public void AddModule()
        {
            var arrName = "Module";
            var model = new Module() { Id = 5, Name = "余額" };
            var json = JsonHelper.SerializeObject(model);
            var filter = new BsonDocument();
            // 更新條件
            filter.Add("PersonId", 1);
            //集合名稱,查詢條件,添加的對象,需要添加的數組名稱
            mongoServer.UpdatePushArray(collationName, filter, json, arrName);
        }

    3.移除模塊,移除個人PersonId=2,id=4的模塊。

     /// <summary>
        /// 移除模塊
        /// </summary>
        public void RemoveModule()
        {
            var arrName = "Module";
            var filter = new BsonDocument();
            // 更新條件
            filter.Add("PersonId", 2);
            //移除PersonId=2的數組名稱為"Module",id=4的對象
            var doc = new BsonDocument() {
                        new BsonElement(arrName,
                            new BsonDocument() {
                                new BsonElement("Id", 4) })};
            mongoServer.UpdatePullArray(collationName, filter, doc);
        }

    4.移動或者移動並刪除模塊

     /// <summary>
        /// 移動或者移動並移除模塊
        /// </summary>
        public void MoveModule()
        {
            var arrName = "Module";
            // 更新條件
            var filter = new BsonDocument();
            filter.Add("PersonId", 3);
            var moduleList = new List<Module>();
            moduleList.Add(new Module { Id = 2,Name= "共享單車" });
            moduleList.Add(new Module { Id = 1, Name = "轉賬" });
            moduleList.Add(new Module { Id = 4, Name = "出行" });
            var json = JsonHelper.SerializeObject(moduleList);
            mongoServer.UpdateArray(collationName, filter, json, arrName);
        }

 

mongoServer類。

 public class MongoServer
    {
        private IMongoDatabase database = null;
        private string server = System.Configuration.ConfigurationManager.AppSettings["MongoServer"];
        private string port = System.Configuration.ConfigurationManager.AppSettings["MongoPort"];
        private string db = System.Configuration.ConfigurationManager.AppSettings["DBName"];
        public MongoServer()
        {
            Init();
        }
        public void Init()
        {
            var client = new MongoClient($"mongodb://{server}:{port}");
            database = client.GetDatabase(db);
        } 
     /// <summary>
        /// 查詢一條
        /// </summary>
        /// <param name="tablename"></param>
        /// <param name="query"></param>
        /// <returns></returns>
        public string FindOne(string tablename, BsonDocument filter)
        {
            var collection = database.GetCollection<BsonDocument>(tablename);
            var documents = collection.Find(filter).FirstOrDefault();
            return documents == null ? "" : documents.ToJson();
        }
        /// <summary>
        /// update
        /// </summary>
        /// <param name="collectionName"></param>
        /// <param name="filter"></param>
        /// <param name="update"></param>
        public void Update(string collectionName, BsonDocument filter, BsonDocument update)
        {
            var collection = database.GetCollection<BsonDocument>(collectionName);
            collection.FindOneAndUpdate(filter, update);
        }
        /// <summary>
        /// insert
        /// </summary>
        /// <param name="collectionName"></param>
        /// <param name="json"></param>
        public void Insert(string collectionName, string json)
        {
            var collection = database.GetCollection<BsonDocument>(collectionName);
            BsonDocument document = BsonDocument.Parse(json);
            collection.InsertOne(document);
        }
        /// <summary>
        /// delete
        /// </summary>
        /// <param name="collectionName"></param>
        /// <param name="json"></param>
        public void Delete(string collectionName, BsonDocument query)
        {
            var collection = database.GetCollection<BsonDocument>(collectionName);
            collection.FindOneAndDelete(query);
        }
     /// <summary>
        /// 批量導入
        /// </summary>
        /// <param name="collectionName"></param>
        /// <param name="docs"></param>
        public void ImportBatch(string collectionName, List<BsonDocument> docs)
        {
            var collection = database.GetCollection<BsonDocument>(collectionName);
            collection.InsertMany(docs);
        }
        /// <summary>
        /// 添加一條數組
        /// </summary>
        /// <param name="collectionName">集合名</param>
        /// <param name="filter">條件</param>
        /// <param name="json">更新內容</param>
        /// <param name="arrayName">數組名</param>
        public void UpdatePushArray(string collectionName, BsonDocument filter, string json, string arrayName)
        {
            //更新mongo簡歷
            var update = new BsonDocument();
            BsonDocument document = BsonDocument.Parse(json);
            //添加doucment數組對象
            update.Add("$push", new BsonDocument() { new BsonElement(arrayName, document) });
            //更新修改時間
            //update.Add("$set", new BsonDocument() {
            //                new BsonElement("",""),
            //            });
            Update(collectionName, filter, update);
        }
        /// <summary>
        /// 刪除一條數組
        /// </summary>
        /// <param name="collectionName"></param>
        /// <param name="filter"></param>
        /// <param name="arrDoc"></param>
        public void UpdatePullArray(string collectionName, BsonDocument filter, BsonDocument arrDoc)
        {
            //更新mongo簡歷
            var update = new BsonDocument();
            //$pull刪除對象數組idName=id的對象文檔
            update.Add("$pull", arrDoc);
            Update(collectionName, filter, update);
        }
        /// <summary>
        /// 更新數組
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="json"></param>
        /// <param name="arrayName"></param>
        public void UpdateArray(string collectionName, BsonDocument filter, string json, string arrayName)
        {
            //更新mongo簡歷
            var update = new BsonDocument();
            var update1 = new BsonDocument();
            //刪除原有數組文檔
            update.Set("$unset", new BsonDocument() { new BsonElement(arrayName, "") });
            Update(collectionName, filter, update);
            //set新的數組
            json = "{ \"" + arrayName + "\" :" + json + "}";
            BsonDocument document = BsonDocument.Parse(json);
            update1.Set("$set", document);
            Update(collectionName, filter, update1);
        }
    }

  最后,注意給document賦值時候的大小寫問題。還有需要引用System.Runtime.InteropServices.RuntimeInformation包。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM