.Net中MoongoDB的简单调用图文教程
更新时间:2019年10月17日 08:27:55 作者:whitebbai
这篇文章主要给大家介绍了关于.Net中MoongoDB的简单调用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
前言
本文主要给大家介绍了关于.Net中MoongoDB调用的方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧
方法如下:
1、安装.Net 驱动:Install-Package MongoDB.Driver
2、数据插入 ,链接数据库
//新建Person测试类
public class Person
{
public long Id { get; set; }
public int Age { get; set; }
public string Name { get; set; }
public int Height { get; set; }
public TestPerson t1{ get; set; }
}
public class TestPerson {
public string Name { get; set; }
}
public class ObjectPerson {
public ObjectId Id { get; set; }
public int Age { get; set; }
public string Name { get; set; }
public int Height { get; set; }
}
MongoClient client = new MongoClient(“mongodb://127.0.0.1”);
IMongoDatabase database = client.GetDatabase(“TestDb”);//相当于数据库
IMongoCollection<Person> collection = database.GetCollection<Person>(“Persons”);//大致相当于表
Person p1 = new Person()
{
Id = 2,
Name = “test1”,
Age = 29,
Height=130
};
collection.InsertOne(p1);//单条插入也支持异步方法,后面建议都用异步的!习惯成自然!
回到客户端工具刷新一下,就能看到新插入的数据,MongoDB 会自动创建“数据库” 以及 Collection(约等于“表”)。MongoDB 默认用 id 做主键,因此不用显式指定 id 是主键。
MongoDB 中没有内置“自增字段”,可以把 Id 声明为 ObjectId 类型(using MongoDB.Bson) 这样插入以后就自动给字段赋值。
//多条插入
IMongoCollection<ObjectPerson> collection1 = database.GetCollection<ObjectPerson>(“ObjectPersons”);//大致相当于表
List<ObjectPerson> persons = new List<ObjectPerson>() { new ObjectPerson() { Name = “test2”, Age = 30, Height = 135 }, new ObjectPerson() { Name = “test3”, Age = 31, Height = 140 } };
collection1.InsertMany(persons);//多条插入
MongoDB 是用 json 保存的,因此也可以直接以 json 格式插入,用 BsonDocument 来代表:
IMongoCollection<BsonDocument> dogs = database.GetCollection<BsonDocument>(“Dogs”);
string jsondata = “{id:8999,Age:81,Name:’japan’,gender:true}”;
BsonDocument p2 = BsonDocument.Parse(jsondata);
dogs.InsertOne(p2);
还可以插入有嵌套关系的对象,比如学生和老师,注意不会有表间关系,都是存到一个集合中,注意和关系库不一样。
IMongoCollection<Person> collection = database.GetCollection<Person>(“Persons”);//大致相当于表
Person p1 = new Person()
{
Id = 2,
Name = “test1″,
Age = 29,
Height=130,
t1=new TestPerson() { Name=”222”}
};
collection.InsertOne(p1);//单条插入
3、MongoDB查询
IMongoCollection<Person> collection = database.GetCollection<Person>(“Persons”);
var filter = Builders<Person>.Filter.Gt(p => p.Age,5);
var filter1 = Builders<Person>.Filter.And(Builders<Person>.Filter.Gt(p => p.Age, 5), Builders<Person>.Filter.Eq(p => p.Id, 1));// And 并且 还有or方法
var filter2 = Builders<Person>.Filter.Where(p => p.Age > 5 && p.Id == 1);//和上面的写法是一样的但是,建议用Where方法
//普通查询
var result= collection.Find(filter).ToList();
foreach (var item in result)
{
Console.WriteLine(item.Age + item.Name);
}
除了 Gt,还有 Gte、In、Lt、Lte、Ne、Nin、Near、NearSphere、Or、Where、And、Not。 当然最常用的还是 Where 操作:
异步查询
//异步查询
using (IAsyncCursor<Person> personsCursor = await collection.FindAsync<Person>(filter)) {
while (personsCursor.MoveNextAsync().Result)//获取下一组数据,相当于是否有指针,MongoDB其实是返回一个组,不像sql每次是一次次取
{
IEnumerable<Person> items = personsCursor.Current;//返回当前组的数据
foreach (var item in items)
{
Console.WriteLine(item.Age + item.Name);
}
}
//如果数据量不大,可以直接tolist
var results = personsCursor.ToList();
}
为什么 FindAsync 不直接返回集合,而是要 MoveNext 之后返回一个集合呢?因为返回 的数据量可能很大,因此 MongoDB 是分批下载,下载一批之后执行 GET_More 操作返回下 一批。可以通过 FindOptions 参数的 BatchSize 设置每一批的大小。
如果确认返回的数据量 不大,可以 var ps = await personsCursor.ToListAsync()(或者 ToEnumerable()等)一下子返回所有数据。还有 Any、First、FirstOrDefault 等以及异步操作。需要注意 MongoDB 中查询区分大小写。
4、分页查询
//分页
FindOptions<Person, Person> findop = new FindOptions<Person, Person>();
findop.Limit = 3;//取最多几条
findop.Skip = 2;//跳过几条
findop.Sort = Builders<Person>.Sort.Ascending(p => p.Age).Ascending(p => p.Name);//排序
using (var cursor = collection.FindAsync(filter, findop).Result)
{
var items = cursor.ToList();
foreach (var item in items)
{
Console.WriteLine(item.Age + item.Name);
}
}
指定排序规则 findop.Sort = Builders<Person>.Sort.Ascending(p => p.Age).Ascending(p => p.Name);
5、Json格式取法
//json格式取法
IMongoCollection<BsonDocument> bsonDoc = database.GetCollection<BsonDocument>(“Persons”);
var filter4 = Builders<BsonDocument>.Filter.Gt(“Age”, 5);
using (var persons=await bsonDoc.FindAsync(filter4))
{
foreach (var item in await persons.ToListAsync())
{
Console.WriteLine(item.GetValue(“Name”).AsString);
}
}
6、Update更新操作
IMongoCollection<Person> upPersons = database.GetCollection<Person>(“Persons”);
var upFilter = Builders<Person>.Filter.Where(p => p.Age>20);//筛选条件
var update = Builders<Person>.Update.Set(c => c.Name, “test2”);//更新条件,将Name更新成test2
upPersons.UpdateMany(filter, update);
7、Delete删除操作
IMongoCollection<Person> teachers = database.GetCollection<Person>(“Persons”);
var deletefilter = Builders<Person>.Filter.Where(p => p.Id == 1);
teachers.DeleteMany(deletefilter);
用 Update 机会比较少,如果频繁的用 Update 可能意味着用错了;也不要想着 join、group by, 还是场景不对!
8、MongoDB 应用场景
日志记录系统;设备监控数据的存储;饿了么外卖骑手接单; 存储商品、商家信息;网站评论信息;存储爬虫爬过来的第三方数据;
但是像订单、金融交易、游戏装备等这些关键信息不要用 MongoDB;
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对华域联盟的支持。
.net
moongodb
调用
相关文章
详解ASP.NET Core 网站发布到Linux服务器本篇文章主要介绍了ASP.NET Core 网站发布到Linux服务器 。具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
2017-04-04
ASP.NET微信公众号添加菜单这篇文章主要为大家详细介绍了ASP.NET微信公众号添加菜单的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2016-11-11
压力测试中需要掌握的几个基本概念一个asp.net的页面。对于压力测试,必须时时刻刻做,如果不知道自己的应用能够承载多少的并发用户数,那基本上就是在扔定时炸弹 2011-09-09
asp.net替换和恢复html特殊字符替换html中的特殊字符需要进行替换的文本。替换完的文本。 2008-05-05
VsCode插件开发之插件初步通信的方法步骤这篇文章主要介绍了VsCode插件开发之插件初步通信的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2019-05-05
.Net Core+Angular Cli/Angular4开发环境搭建教程这篇文章主要为大家详细介绍了.Net Core+Angular Cli/Angular4开发环境搭建教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-06-06
asp.net updatepanel 导致JS不能加载,而无法使用的解决方法asp.net updatepanel 局部刷新,导致JS不能加载,而无法使用,而且 updatepanel会刷两次,郁闷的,解决方法如下 2013-08-08
运行page页面时的事件执行顺序及页面的回发与否深度了解page页面时的事件执行顺序的了解对于一些.net开发者起到者尤关重要的作用;页面的回发与否会涉及到某些事件执行与不执行,在本文中会详细介绍,感兴趣的朋友可以了解下 2013-01-01
asp.net 读取配置文件方法asp.net 读取配置文件方法,需要的朋友可以参考下。 2011-12-12
ASP.NET让FileUpload控件支持浏览自动上传功能的解决方法这篇文章主要介绍了ASP.NET让FileUpload控件支持浏览自动上传功能的解决方法,很实用的技巧,需要的朋友可以参考下 2014-07-07
最新评论

评论(0)