C#操作MongoDB的简单实例

Wesley13
• 阅读 837

  最近比较忙,很久没更新了(虽然没人看,也没人在乎,也要记得be yourself),

  前面分享了一些mongodb的安装和简单的语法,今天模仿支付宝首页的模块移动功能,用mongo做一个简单的后台实例。

  one,启动本地的mongo服务like this.

C#操作MongoDB的简单实例

  two,连接mongo可视化界面,建立PersonModule的文档集合。

C#操作MongoDB的简单实例 C#操作MongoDB的简单实例

  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);
        }

C#操作MongoDB的简单实例

    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);
        }

C#操作MongoDB的简单实例

    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);
        }

C#操作MongoDB的简单实例

    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);
        }

C#操作MongoDB的简单实例

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包。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这