.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 是主键。

.Net中MoongoDB的简单调用图文教程

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);//多条插入

.Net中MoongoDB的简单调用图文教程


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);

.Net中MoongoDB的简单调用图文教程


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

IMongoCollection<Person> collection = database.GetCollection<Person>("Persons");//大致相当于表 Person p1 = new Person() { Id = 2, Name = "test1", Age = 29, Height=130, t1=new TestPerson() {} }; collection.InsertOne(p1);//单条插入

.Net中MoongoDB的简单调用图文教程


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、分页查询

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wdswwj.html