马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

.Net下MoongoDB的简单调用

[复制链接]
查看2119 | 回复1 | 2019-10-17 09:44:19 | 显示全部楼层 |阅读模式

1、安装.Net 驱动:Install-Package MongoDB.Driver

2、数据插入 ,链接数据库

  1. //新建Person测试类
  2. public class Person
  3. {
  4. public long Id { get; set; }
  5. public int Age { get; set; }
  6. public string Name { get; set; }
  7. public int Height { get; set; }
  8. public TestPerson t1{ get; set; }
  9. }
  10. public class TestPerson {
  11. public string Name { get; set; }
  12. }
  13. public class ObjectPerson {
  14. public ObjectId Id { get; set; }
  15. public int Age { get; set; }
  16. public string Name { get; set; }
  17. public int Height { get; set; }
  18. }
复制代码
  1. MongoClient client = new MongoClient("mongodb://127.0.0.1");
  2. IMongoDatabase database = client.GetDatabase("TestDb");//相称于数据库
  3. IMongoCollection<Person> collection = database.GetCollection<Person>("Persons");//大抵相称于表
  4. Person p1 = new Person()
  5. {
  6. Id = 2,
  7. Name = "test1",
  8. Age = 29,
  9. Height=130
  10. };
  11. collection.InsertOne(p1);//单条插入也支持异步方法,反面建议都用异步的!风俗成天然!
复制代码
  1. [/code]
  2. <p>回到客户端工具革新一下,就能看到新插入的数据,MongoDB 会主动创建“数据库” 以及 Collection(约便是“表”)。MongoDB 默认用 id 做主键,因此不用显式指定 id 是主键。</p>
  3. <p><div align="center"> 094420g7p50hf0kk4hk5g4.png </div></p>
  4. <p>MongoDB 中没有内置“自增字段”,可以把 Id 声明为 ObjectId 类型(using MongoDB.Bson) 这样插入以后就主动给字段赋值。</p>
  5. [code] //多条插入
  6. IMongoCollection<ObjectPerson> collection1 = database.GetCollection<ObjectPerson>("ObjectPersons");//大抵相称于表
  7. List<ObjectPerson> persons = new List<ObjectPerson>() { new ObjectPerson() { Name = "test2", Age = 30, Height = 135 }, new ObjectPerson() { Name = "test3", Age = 31, Height = 140 } };
  8. collection1.InsertMany(persons);//多条插入
复制代码

094420qqvgecvu52tr4cxt.png

MongoDB 是用 json 生存的,因此也可以直接以 json 格式插入,用 BsonDocument 来代表:

  1. IMongoCollection<BsonDocument> dogs = database.GetCollection<BsonDocument>("Dogs");
  2. string jsondata = "{id:8999,Age:81,Name:'japan',gender:true}";
  3. BsonDocument p2 = BsonDocument.Parse(jsondata);
  4. dogs.InsertOne(p2);
复制代码

094421tbzmeflmxazmjavk.png

还可以插入有嵌套关系的对象,好比弟子和老师,注意不会有表间关系,都是存到一个聚集中,注意和关系库不一样。

  1. IMongoCollection<Person> collection = database.GetCollection<Person>("Persons");//大抵相称于表
  2. Person p1 = new Person()
  3. {
  4. Id = 2,
  5. Name = "test1",
  6. Age = 29,
  7. Height=130,
  8. t1=new TestPerson() { Name="222"}
  9. };
  10. collection.InsertOne(p1);//单条插入
复制代码

094421boauzoboafc9jjmb.png

3、MongoDB查询

  1. IMongoCollection<Person> collection = database.GetCollection<Person>("Persons");
  2. var filter = Builders<Person>.Filter.Gt(p => p.Age,5);
  3. var filter1 = Builders<Person>.Filter.And(Builders<Person>.Filter.Gt(p => p.Age, 5), Builders<Person>.Filter.Eq(p => p.Id, 1));// And 并且 还有or方法
  4. var filter2 = Builders<Person>.Filter.Where(p => p.Age > 5 && p.Id == 1);//和上面的写法是一样的但是,建议用Where方法
  5. //普通查询
  6. var result= collection.Find(filter).ToList();
  7. foreach (var item in result)
  8. {
  9. Console.WriteLine(item.Age + item.Name);
  10. }
复制代码

除了 Gt,还有 Gte、In、Lt、Lte、Ne、Nin、Near、NearSphere、Or、Where、And、Not。 固然最常用的照旧 Where 利用:

异步查询

  1. //异步查询
  2. using (IAsyncCursor<Person> personsCursor = await collection.FindAsync<Person>(filter)) {
  3. while (personsCursor.MoveNextAsync().Result)//获取下一组数据,相称于是否有指针,MongoDB其实是返回一个组,不像sql每次是一次次取
  4. {
  5. IEnumerable<Person> items = personsCursor.Current;//返回当前组的数据
  6. foreach (var item in items)
  7. {
  8. Console.WriteLine(item.Age + item.Name);
  9. }
  10. }
  11. //假如数据量不大,可以直接tolist
  12. var results = personsCursor.ToList();
  13. }
复制代码

为什么 FindAsync 不直接返回聚集,而是要 MoveNext 之后返回一个聚集呢?因为返回 的数据量可能很大,因此 MongoDB 是分批下载,下载一批之后执行 GET_More 利用返回下 一批。可以通过 FindOptions 参数的 BatchSize 设置每一批的巨细。

假如确认返回的数据量 不大,可以 var ps = await personsCursor.ToListAsync()(或者 ToEnumerable()等)一下子返回全部数据。还有 Any、First、FirstOrDefault 等以及异步利用。必要注意 MongoDB 中查询区分巨细写。

4、分页查询

  1. //分页
  2. FindOptions<Person, Person> findop = new FindOptions<Person, Person>();
  3. findop.Limit = 3;//取最多几条
  4. findop.Skip = 2;//跳过几条
  5. findop.Sort = Builders<Person>.Sort.Ascending(p => p.Age).Ascending(p => p.Name);//排序
  6. using (var cursor = collection.FindAsync(filter, findop).Result)
  7. {
  8. var items = cursor.ToList();
  9. foreach (var item in items)
  10. {
  11. Console.WriteLine(item.Age + item.Name);
  12. }
  13. }
复制代码

指定排序规则 findop.Sort = Builders.Sort.Ascending(p => p.Age).Ascending(p => p.Name);

5、Json格式取法

  1. //json格式取法
  2. IMongoCollection<BsonDocument> bsonDoc = database.GetCollection<BsonDocument>("Persons");
  3. var filter4 = Builders<BsonDocument>.Filter.Gt("Age", 5);
  4. using (var persons=await bsonDoc.FindAsync(filter4)) <br />{
  5. foreach (var item in await persons.ToListAsync())
  6. {
  7. Console.WriteLine(item.GetValue("Name").AsString);
  8. }
  9. }
复制代码

6、Update更新利用

  1. IMongoCollection<Person> upPersons = database.GetCollection<Person>("Persons");
  2. var upFilter = Builders<Person>.Filter.Where(p => p.Age>20);//筛选条件
  3. var update = Builders<Person>.Update.Set(c => c.Name, "test2");//更新条件,将Name更新成test2
  4. upPersons.UpdateMany(filter, update);
复制代码

7、Delete删除利用

  1. IMongoCollection<Person> teachers = database.GetCollection<Person>("Persons");
  2. var deletefilter = Builders<Person>.Filter.Where(p => p.Id == 1);
  3. teachers.DeleteMany(deletefilter);
复制代码

用 Update 时机比力少,假如频仍的用 Update 可能意味着用错了;也不要想着 join、group by, 照旧场景不对!

8、MongoDB 应用场景

日记记录体系;装备监控数据的存储;饿了么外卖骑手接单; 存储商品、商家信息;网站评论信息;存储爬虫爬过来的第三方数据;

但是像订单、金融交易、游戏装备等这些关键信息不要用 MongoDB;







来源:https://www.cnblogs.com/whitebai/p/11689363.html
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则