Mongodb是一种比较常见的NOSQL数据库,数据库排名第四,今天介绍一下Net Core 下,常规操作。

首先下C# 版的驱动程序 “MongoDB.Driver”,相关依赖包自行引用进来。 过于细节的基础知识就不讲了,直接就奔主题了

using MongoDB.Driver; //命名空间
MongoClient client = new MongoClient("mongodb://192.168.99.5");
IMongoDatabase dbBase = client.GetDatabase("School");

Mongodb有一个特性,你可以不用先建数据库和集合,数据库会自行检查,如果没有就新建。

IMongoCollection<> collection = dbBase.GetCollection<>("Class"); //获取集合
GetCollection是一个泛型方法,你可以输入BsonDocument,或者实体,Mongodb驱动程序会自动帮你序列化
IMongoCollection<BsonDocument> collection = dbBase.GetCollection<BsonDocument>("Class");
  public class Class
    {
        public BsonObjectId Id { set; get; }

        public string ClassName { set; get; }

        public List<Student> StudentItems { set; get; }
    }

    public class Student
    {
        public string Name { set; get; }

        public int Age { set; get; }

        public string Sex { set; get; }
    }

  IMongoCollection<Class> collection = dbBase.GetCollection<Class>("Class");

如果你使用BsonDocument,那么你会得么一个BsonDocument对象,Mongodb驱动程序内置了序列化方法,方便将BsonDocument转换成实体对象。

using MongoDB.Bson.Serialization;//命名空间
var schoolClass = BsonSerializer.Deserialize<Class>(new BsonDocument());

Mongodb驱动程序支持Linq 语法,你可以借此写出优雅语句。

var schoolClass = collection.Find(n => n.ClassName == "一年级").FirstOrDefault();
var schoolClass2 = collection.AsQueryable<Class>().Where(n => n.ClassName == "一年级").FirstOrDefault();
var schoolClass3 = collection.Find(new BsonDocument("ClassName", "一年级")).FirstOrDefault();

Mongodb驱动程序还支持异步方法,根据命名约定,很多方法相应的Async结尾的,都是异步方法。

var schoolClass = await collection.Find(n => n.ClassName == "一年级").FirstOrDefaultAsync();
var schoolClass2 = await  collection.AsQueryable<Class>().Where(n => n.ClassName == "一年级").FirstOrDefaultAsync();
var schoolClass3 = await  collection.Find(new BsonDocument("ClassName", "一年级")).FirstOrDefaultAsync();

基本介绍完毕,下面进入增删更改的操作方法。

---------------------------增加---------------------------------


IMongoCollection<Class> collection = dbBase.GetCollection<Class>("Class");
//写入单个
collection.InsertOne(new Class
{
    ClassName = "二年级",
    StudentItems = new List<Student>
    {
        ,Name="李明",Sex="男" },
        ,Name="小红",Sex="女" }
    }
});
//批量写入
collection.InsertMany(new List<Class>
{
    new Class
    {
        ClassName = "二年级",
        StudentItems = new List<Student>
        {
            ,Name="李明",Sex="男" },
            ,Name="小红",Sex="女" }
        }
    }
});
IMongoCollection<BsonDocument> collection = dbBase.GetCollection<BsonDocument>("Class");
//写入单个
collection.InsertOne(new BsonDocument {
    {"ClassName","二年级" },
    {"StudentItems",new BsonArray{
             },{ "Name", "李明" },{ "Sex", "男" } }
        }
    }
});
//批量写入
collection.InsertMany(new List<BsonDocument>
{
    new BsonDocument {
    {"ClassName","二年级" },
    {"StudentItems",new BsonArray{
             },{ "Name", "李明" },{ "Sex", "男" } }
        }
    } },
    new BsonDocument {
    {"ClassName","二年级" },
    {"StudentItems",new BsonArray{
             },{ "Name", "李明" },{ "Sex", "男" } }
        }
    } }
});

不过,使用C#语言,我还是尽量推荐使用实体来添加,可读性,维护性也强。也有缺点,JSON结构如果使用实体话,类库较大,庆幸的Mongodb驱动程序可以帮你序列化。

BsonDocument结构虽然符合JSON,用起来却很痛苦,不过也减少类库的数量。

---------------------------删除---------------------------------

IMongoCollection<Class> collection = dbBase.GetCollection<Class>("Class");
//删除单个
collection.DeleteOne(n => n.ClassName == "二年级");//使用拉姆达表达式
collection.DeleteOne(new BsonDocument("ClassName", "二年级"));//使用BsonDocument
var filter = Builders<Class>.Filter.Eq("_id", new BsonObjectId("5a545e9381a98c3ab46c9cb9"));
collection.DeleteOne(filter);//使用Builders,
//批量删除
collection.DeleteMany(n => n.ClassName == "二年级");
collection.DeleteMany(new BsonDocument("ClassName", "二年级"));
collection.DeleteMany(filter);
//删除并返回
collection.FindOneAndDelete(n => n.ClassName == "三年级");
IMongoCollection<BsonDocument> collection = dbBase.GetCollection<BsonDocument>("Class");
//删除单个
collection.DeleteOne(new BsonDocument("ClassName", "二年级"));//使用BsonDocument
var filter = Builders<BsonDocument>.Filter.Eq("_id", new BsonObjectId("5a545e9381a98c3ab46c9cb9"));
collection.DeleteOne(filter);//使用Builders,
//批量删除
collection.DeleteMany(new BsonDocument("ClassName", "二年级"));
collection.DeleteMany(filter);
//删除并返回
collection.FindOneAndDelete(new BsonDocument("ClassName", "二年级"));

使用BsonDocument,就不能使用酷酷的拉姆达表达式了,其它的差不多。

---------------------------更改---------------------------------

IMongoCollection<Class> collection = dbBase.GetCollection<Class>("Class");
//修改单个
var filter = Builders<Class>.Filter.Eq("_id", new BsonObjectId("5a545e9381a98c3ab46c9cb8"));
var update = Builders<Class>.Update.Set("ClassName", "三年级");
var update2 = Builders<Class>.Update.Set(n => n.ClassName, "三年级");

collection.UpdateOne(n => n.ClassName == "二年级", update);//使用拉姆达表达式
collection.UpdateOne(filter, update2);//使用Builders
//批量修改
collection.UpdateMany(n => n.ClassName == "二年级", update);
collection.UpdateMany(filter, update2);
//替换
var schoolClass = collection.Find(n => n.ClassName == "二年级").FirstOrDefault();
collection.ReplaceOne(n => n.ClassName == "二年级", schoolClass);

使用BsonDocument 也是相应差不多,我就不贴出代码了。

修改数组,则大概如下

//数组增加一个
, Name = "张明", Sex = "男" });
collection.UpdateOne(n => n.ClassName == "三年级", update);
//数组减少一个
, Name = "张明", Sex = "男" });
collection.UpdateOne(n => n.ClassName == "三年级", update2);
//数组修改一个
);
collection.UpdateOne(n => n.ClassName == ), update3);
, Name = "张明", Sex = "男" });
collection.UpdateOne(n => n.ClassName == ), update4);

示例是筛选过,不能每种写法写出来,读者自行试尝组合

---------------------------查询---------------------------------

var shoolClass = collection.Find(n => n.ClassName == "三年级").FirstOrDefault();//使用拉姆达表达式
var shoolClassItems = collection.Find(n => n.ClassName == "三年级").ToList();
var shoolClass2 = collection.Find(new BsonDocument("ClassName", "三年级")).FirstOrDefault();
var shoolClassItems2 = collection.Find(new BsonDocument("ClassName", "三年级")).ToList();
var filter = Builders<Class>.Filter.Eq(n => n.ClassName, "三年级");//使用Builders
var shoolClass3 = collection.Find(filter).FirstOrDefault();
var shoolClassItems3 = collection.Find(filter).ToList();

Mongodb的基本应用,就讲解完毕,笔记一下

Mongodb常规操作【一】的更多相关文章

  1. mongodb常规操作语句

    db.c_user.insertOne({ name: "ljm", pwd: "123456" }); //插入一个 db.c_user.insertMany ...

  2. mongodb基础整理篇————常规操作[二]

    前言 简单整理一下常规操作. 正文 虽然一般说写代码看的是思想,但是呢,如果不知道mongodb 有哪些常用的操作,那么你怎么能知道mongodb是否符合你的需求,比如说如果聚合功能都没有,你得自己写 ...

  3. MongoDB查询操作限制返回字段的方法

    这篇文章主要介绍了MongoDB查询操作限制返回字段的方法,需要的朋友可以参考下   映射(projection )声明用来限制所有查询匹配文档的返回字段.projection以文档的形式列举结果集中 ...

  4. EasyUI-datagrid数据展示+MongoDB数据操作

    使用EasyUI-datagrid进行数据展示:进行添加,修改,删除操作逻辑代码,数据源来自MongoDB. 一.新建SiteInfo控制器,添加Index页面:http://www.cnblogs. ...

  5. Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作

    2 Mongodb CRUD 操作 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mong ...

  6. FTP服务器常规操作

    导读 FTP协议是Internet文件传输的基础,它是由一系列规格说明文档组成,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据.下面就由我给大家简单介绍一下 ...

  7. Apache服务器常规操作

    导读 Apache是世界上排名第一的Web服务器,50%以上的Web服务器都在使用Apache,它几乎可以在所有计算机平台上运行.下面就由我给大家说说Apache服务器的一些常规操作. Apache服 ...

  8. mysql服务器的常规操作

    mysql服务器的常规操作 导读 MySQL是一个小型关系数据库管理系统,目前被广泛的应用在Internet上的中小型网站中,体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,使得许多中小型网站 ...

  9. 征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)

    有日子没写博客了,真的是忙得要疯掉. 完成项目基础架构搭建工作,解决了核心技术问题,接着需要快速的调研下基于Spring框架下的Redis操作. 相关链接: 征服 Redis 征服 Redis + J ...

随机推荐

  1. Python笔记·第一章—— Python基础(一)

    一.Python的简介 1.Python的由来与版本 1.1 python的由来 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文 ...

  2. 小程序使用wx.chooseAddress获取用户手机号码,微信chooseAddress接口获取用户收货信息

    通常用户在商城购买产品后,需要填写他的收货信息,方便我们发货,但是在手机上写字非常不方便,一个客户的收货信息包括:姓名,地址和手机号码这些内容全部填写的话,至少要写20个字. 地址 所以有些客户在手机 ...

  3. Replace Pioneer

    Replace Pioneer(官网:http://www.mind-pioneer.com)是一款专业的文本批量处理软件.仅仅要给定不论什么纯文本文件或文件列表.仅仅要准确设置转换规则.就能得到不论 ...

  4. Swift开发教程--使用Storyboard进行界面跳转

    使用storyboard结合代码来做确实能够给开发带来非常多的便利. 在实践的过程中,我们常常会遇到界面的跳转问题. 通过控件和界面的建立的"连接"就能够了. 假设是navigat ...

  5. 黑马day16 jquery&amp;内容过滤选择器&amp;可见度选择器

    内容过滤选择器的过滤规则主要体如今它所包括的子元素和文本内容上 .:contains(text) 使用方法: $("div:contains('John')")    返回值  集 ...

  6. 几条jQuery代码片段助力Web开发效率提升

    平滑滚动至页面顶部 以下是jQuery最为常见的一种实现效果:点击一条链接以平滑滚动至页面顶部.虽然没什么新鲜感可言,但每位开发者几乎都用得上. $("a[href='#top']" ...

  7. log4j配置文件详解(转)

    Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...

  8. Unity优化之GC——合理优化Unity的GC

      转载请标明出处http://www.cnblogs.com/zblade/ 最近有点繁忙,白天干活晚上抽空写点翻译,还要运动,所以翻译工作进行的有点缓慢 =.= PS: 最近重新回来更新了一遍,文 ...

  9. Jenkins in OpenCASCADE

    Jenkins in OpenCASCADE eryar@163.com Abstract. Jenkins是一个开源软件项目,是基于Java开发的一个持续集成工具,用于监控持续复制的工作,旨在提供一 ...

  10. 前端MVC Vue2学习总结(三)——模板语法、过滤器、计算属性、观察者、Class 与 Style 绑定

    Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据.所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解 ...