本站业务范围:1、PC端软件开发、网站开发 2、移动端APP、网站、微信接口、微商城开发 3、视频教程、毕业设计辅导
 当前位置:文章中心 >> sql2016_sql2012_sql2015_sql2008
立即购买视频教程 Mongodb是一种比较常见的NOSQL数据库
夜鹰教程网 来源:www.yyjcw.com 日期:2018/1/9 19:11:33
Mongodb是一种比较常见的NOSQL数据库

这篇文章不能解决你的问题?我们还有相关视频教程哦!

QQ:1416759661 新手QQ群:7835003  加Q远程协助!

在线解答|Demo制作|远程调试| 点击查看相关的视频教程

技术咨询: 购买教程  技术咨询:购买教程  大胆的加QQ咨询。

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>

    {

        new Student{Age=10,Name="李明",Sex="男" },

        new Student{Age=12,Name="小红",Sex="女" }

    }

});

//批量写入

collection.InsertMany(new List<Class>

{

    new Class

    {

        ClassName = "二年级",

        StudentItems = new List<Student>

        {

            new Student{Age=10,Name="李明",Sex="男" },

            new Student{Age=12,Name="小红",Sex="女" }

        }

    }

});

复制代码

 


复制代码

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

//写入单个

collection.InsertOne(new BsonDocument {

    {"ClassName","二年级" },

    {"StudentItems",new BsonArray{

            new BsonDocument { { "Age", 10 },{ "Name", "李明" },{ "Sex", "男" } }

        }

    }

});

//批量写入

collection.InsertMany(new List<BsonDocument>

{

    new BsonDocument {

    {"ClassName","二年级" },

    {"StudentItems",new BsonArray{

            new BsonDocument { { "Age", 10 },{ "Name", "李明" },{ "Sex", "男" } }

        }

    } },

    new BsonDocument {

    {"ClassName","二年级" },

    {"StudentItems",new BsonArray{

            new BsonDocument { { "Age", 10 },{ "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 也是相应差不多,我就不贴出代码了。


 修改数组,则大概如下


复制代码

//数组增加一个

var update = Builders<Class>.Update.Push("StudentItems", new Student { Age = 18, Name = "张明", Sex = "男" });

collection.UpdateOne(n => n.ClassName == "三年级", update);

//数组减少一个

var update2 = Builders<Class>.Update.Pull(n => n.StudentItems, new Student { Age = 18, Name = "张明", Sex = "男" });

collection.UpdateOne(n => n.ClassName == "三年级", update2);

//数组修改一个

var update3 = Builders<Class>.Update.Set("StudentItems.$.Age", 30);

collection.UpdateOne(n => n.ClassName == "三年级" && n.StudentItems.Any(m=>m.Age==10), update3);

var update4 = Builders<Class>.Update.Set("StudentItems.$", new Student { Age = 18, Name = "张明", Sex = "男" });

collection.UpdateOne(n => n.ClassName == "三年级" && n.StudentItems.Any(m => m.Age == 10), 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的基本应用,就讲解完毕,笔记一下


复制链接 网友评论 收藏本文 关闭此页
上一条: 什么是BI?  下一条: SQL2008 提示评估期已过的解决方法
购买夜鹰教程网视频教程
  推荐教程/优惠活动

  热门服务/教程目录

  夜鹰教程网  新手必看,详细又全面。
  夜鹰教程网  购买教程  夜鹰教程网  在线支付-方便
  夜鹰教程网  担保交易-快捷安全   夜鹰教程网  闪电发货
  夜鹰教程网  电话和QQ随时可以联系我们。
  夜鹰教程网 不会的功能都可以找我们,按工作量收费。

客服电话:153 9760 0032

购买教程QQ:1416759661  购买教程
  热点推荐
牛人是怎样处理海量数据的
MYSQL与MSSQL UPDATE两表更新语法…
SQL SERVER常用日期函数的详解
随机查询ORDER BY NEWID()
批量插入数据 延时 SQL
用sql转换汉字为拼音
定时同步服务器上的数据
SQL Server 2008与SQL Server 200…
在XP下安装SQL Server2000 清除安…
SQL触发器实例
Mssql触发器学习例子之UPDATE触发…
两表连接的SQL语句
写一个HTML代码或C++代码分析器是…
分页存储过程!
普通行列转换 SQL(1)
  尊贵服务
夜鹰教程网 承接业务:软件开发 网站开发 网页设计 .Net+C#+VS2008+MSsql+Jquery+ExtJs全套高清完整版视频教程
  最近更新
什么是BI?
Mongodb是一种比较常见的NOSQL数据…
SQL2008 提示评估期已过的解决方法…
存在属性(Directory, Compressed)…
属性不匹配directory,archive
sql2012安装图解教程
一条sql语句批量插入多条记录
sql2016下载
sql server2008 r2 密钥
sql2016安装密钥
sql2016安装图解教程
sql server 2012提示评估期已过的…
sql 设置主键、自动增长列、默认值…
SQL Server 2016将提供更好的数据…
SQL Server2016 新功能实时查询统…
  工具下载  需要远程协助? 购买教程

sql2008视频教程 c#视频教程

VIP服务:如果您的某个功能不会做,可以加我们QQ,给你做DEMO!

JQUERY  Asp.net教程

MVC视频教程  vs2012
.NET+sql开发
手机:15397600032 C#视频教程下载
vs2012 vs2008 vs2010 sql2008 sql2005
Asp.Net  

教程咨询QQ:1416759661


这篇文章不能解决你的问题?我们还有相关视频教程哦!

QQ:1416759661 新手QQ群:7835003  加Q远程协助!

在线解答|Demo制作|远程调试| 点击查看相关的视频教程

技术咨询: 购买教程  技术咨询:购买教程  大胆的加QQ咨询。

出售asp.net系列视频教程 高清原创版 每天晚上20:30--23:00在线 按照编号从简单到高级 http://www.yyjcw.com/list.html