前言

本文主要给大家介绍了关于.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;

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对www.887551.com的支持。