前言
本文主要给大家介绍了关于.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 之后返回一个集合呢"htmlcode">
//分页 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;
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 群星1995《摇滚中国乐势力》首版引进版[WAV+CUE][983M]
- 陈思安《32首酒廊情调》2CD新雅(国际)影碟[WAV+CUE]
- 齐豫潘越云《回声》K2HD[正版原抓WAV+CUE]
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]