这边用的是mongoDB官网推荐使用.net驱动:

http://mongodb.github.io/mongo-csharp-driver/2.0/getting\_started/quick\_tour/

有关于MongoDB的设置读者可以参照其他的博客,对于着力的念吧并不需要进行过多之布局。

 

始建连接

当即无异于步骤跟ADO.NET连接受数据库的步骤是同等的,ADO.NET是使用SqlConnection连接数据库,而MongoDB则采用MongoClient连接,并以构造函数中将连接字符传递进入,当然好免传递,那么默认就是接连本地的微机的默认端口(27017),比如下面的老三栽连接方式:

1 var client = new MongoClient();
2
3 var client1 = new MongoClient(“mongodb://localhost:27017”);
4
5 var client2 = new
MongoClient(“mongodb://localhost:27017,localhost:27018,localhost:27019”);

 

 

获取数据库

为获取数据库,只需要调用MongoClient对象的GetDatabase方法,并传到数据库名称即可,如果数据库是则直接回到,否则就是创办该数据库并返,比如下面的当即段代码用创设名也“foo”的数据库:

var database = client.GetDatabase(“foo”);
今database变量就针对了foo数据库了。

 

博链表

虽说吃获取链表,但是实际上就是获取数据库中之申,我们好透过地方database的GetCollection<TDocument>方法得到,比如下面的代码我们拿得到一个名也“bar”的说明:

var collection = database.GetCollection<BsonDocument>(“bar”);
咱俩传入的泛型参数为BsonDocument,这个是自带的,可以动态的包容各种格式的数,当然这里还是建议读者以POCO。

 

插一个文档

行使collection对象,我们得拿文档插入其中,比如下面的json格式数据:

{
     “name”: “MongoDB”,
     “type”: “database”,
     “count”: 1,
     “info”: {
         x: 203,
         y: 102
     }
}

脚我们采用BsonDocument对象组织地方的JSON格式的数目:

var document = new BsonDocument
{
    {“name”,”MongoDB”},
    {“type”,”Database”},
   {“count”,1},
   {“info”,new BsonDocument{
         {“x”,203},
         {“y”,102}
       }
   }
};

下一场我们以collection对象的InsertOneAsync将上面的多少插入其中:

collection.InsertOneAsync(doc);
咱们且知晓Async为后缀的道还是支持异步的,但是笔者是以控制台项目中示范的故没有增长这await,如果读者实在其他的条件遭到测试的可以根据情况增长。

 

栽多只文档

若是急需一次性插入多只文档,我们得以经InsertManyAsync方法,比如下面的以身作则我们用插入100长数:

var documents = Enumerable.Range(0, 100).Select(x => new
BsonDocument(“counter”, x));
collection.InsertManyAsync(documents);
 

 

统计文档数量

经地方的步调我们已插入了101久数,如果在实质上支付中我们得统计数据的数量就是足以经过调用CountAsync方法,比如下面的代码:

var count = collection.CountAsync(new BsonDocument());
Console.WriteLine(count.Result);
 

 

查询链表

采用Find方法我们得以对链表进行查询,Find方法将赶回给咱们IFindFluent<TDocument,TProjection>对象,该接口属于链式接口,所以能提供于咱们好像jquery那样的链式变成方式去控制查询操作。

 

查询链表首漫漫数据

为了博取第一久数我们好透过调用FirstOrDefaultAsync方法,该方法会返回第一长长的数,如果未存在数据则会回来null,比如下面的代码用会见来得链表中的第一漫漫数:

var firstDoc = collection.Find(new
BsonDocument()).FirstOrDefaultAsync();
Console.WriteLine(firstDoc.Result.ToString());
苟读者注意最后的输出,会意识一个_id字段,但是咱并不曾加塞儿这个字段,这个字段是mongoDB自动加入的,相信广大丁犹了解其的企图,这里虽不详细解释额。

 

询问链表中具有数据

假如想以链表中具备的多少都回可以于Find操作之后调用ToListAsync方法就可以,将见面直接返回List<T>类型的结果,比如下面的即段代码:

var documents = collection.Find(new
BsonDocument()).ToListAsync().Result;
针对数量比少的数量情况下,上面这种方法是从未问题,但万一我们用处理大量之数码,那么我们不怕不可知应用方面的这种方式,就待以下的计,通过ForEachAsync来成功,因为是方法会在各条数据返回的当儿实施一个回调,从而达到并发处理的目的,比如下面就段代码就演示了安以:

collection.Find(new BsonDocument()).ForEachAsync(x =>
Console.WriteLine(x));
 

 

透过标准查询单条数据

咱得以于调用Find方法的时刻传出一个过滤条件,从而以链表中查询我们愿意之多少,比如下面是事例我们拿查询字段“counter”的价值吗71之数量:

var filter = Builders<BsonDocument>.Filter.Eq(“counter”, 71);
var document = collection.Find(filter).FirstAsync().Result;
Console.WriteLine(document);
这里我们用通过Builders的静态对象Filter中之各种条件方法来组织条件,然后在调用Find方法的拿其传播即可。

 

通过规范查询多长达数

俺们为足以博多长数据,比如下面这事例,我们用搜出所有“counter”的价值过50的多寡:

var filter = Builders<BsonDocument>.Filter.Gt(“counter”, 50);
var document = collection.Find(filter).ForEachAsync(x =>
Console.WriteLine(x));
 

当我们也足以让得一个限制,比如50暨70里边:

var filterBuilder = Builders<BsonDocument>.Filter;
var filter = filterBuilder.Gt(“counter”, 50) &
filterBuilder.Lt(“counter”, 70);
collection.Find(filter).ForEachAsync(x => Console.WriteLine(x));
 

 

对数码排序

下面我们用当查询的根基之上加上排序,排序只待以当调用Sort方法时传出对应之参数即可,比如下面的事例,我们将本着链表先进行查询,然后排序:

var filter = Builders<BsonDocument>.Filter.Exists(“counter”);
var sort = Builders<BsonDocument>.Sort.Descending(“counter”);
var documnt = collection.Find(filter).Sort(sort).FirstAsync().Result;
 

 

对字段投射

众多时刻咱们并不需要文档中的有着数据,这即好比在SQL中我们还见面仅仅将我们得之数码select出来,而无见面把表中的所有字段的多少都拿出来,自然MongoDB也足以于我这样做,我们特需要同过滤跟排序一样用Projection构造器来构造然后传递让Project方法吃不怕可了,下面是事例中我们以破“_id”字段:

var projection =
Builders<BsonDocument>.Projection.Exclude(“_id”);
var document = collection.Find(new
BsonDocument()).Project(projection).FirstAsync().Result;
Console.WriteLine(document);
 

 

更新文档

MongoDB拥有很多创新操作,下面我们以见面介绍几只简易的同时常用之创新操作。

 

只要我们要创新一个靶(如果基准不配合那么可能是0长长的),可以以UpdateOneAsync方法,并推行过滤条件及需创新到的文档,比如下面我们将“counter”为1的数额被之“counter”更新也110:

var filter = Builders<BsonDocument>.Filter.Eq(“counter”, 1);
var updated = Builders<BsonDocument>.Update.Set(“counter”, 110);
var result = collection.UpdateOneAsync(filter, updated).Result;
 

要是我们需要批量之更新,我们得以调用UpdateManyAsync即可。比如我们用拿“counter”小于10之数码中之“counter”累加100,那么我们不怕可以像下这样来写:

var filter = Builders<BsonDocument>.Filter.Lt(“counter”, 10);
var updated = Builders<BsonDocument>.Update.Inc(“counter”, 100);
var result = collection.UpdateManyAsync(filter, updated).Result;
 

 

剔除文档

当基础部分即为是终极一个有的了,利用点的过滤,然后调用DeleteOneAsync或DeleteManyAsync方法就好了,比如下面的列子就是去除“counter”大于100底享有数据:

var filter = Builders<BsonDocument>.Filter.Gt(“counter”, 100);
var resut = collection.DeleteManyAsync(filter).Result;

相关文章

网站地图xml地图