.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;
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
推荐阅读