服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - 详解MongoDB for C#基础入门

详解MongoDB for C#基础入门

2021-12-14 13:36y-z-f C#

本篇文章主要介绍了MongoDB for C#基础入门,具体介绍了c#中关于对MongoDB的连接,插入,查询等,有需要的可以了解一下。

笔者这里采用的是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
2
3
4
5
var client = new MongoClient();
 
var client1 = new MongoClient("mongodb://localhost:27017");
 
var client2 = new MongoClient("mongodb://localhost:27017,localhost:27018,localhost:27019");

获取数据库

为了获取数据库,只需要调用MongoClient对象的GetDatabase方法,并传入数据库名称即可,如果数据库存在则直接返回,否则就创建该数据库并返回,比如下面的这段代码将创建名为“foo”的数据库:

?
1
var database = client.GetDatabase("foo");

现在database变量就指向了foo数据库了。 

获取链表

虽然叫获取链表,但是实际上就是获取数据库中的表,我们可以通过上面database的GetCollection<TDocument>方法获取,比如下面的代码我们将获取一个名为“bar”的表:

?
1
var collection = database.GetCollection<BsonDocument>("bar");

我们传入的泛型参数为BsonDocument,这个是自带的,可以动态的容纳各种格式的数据,当然这里还是建议读者使用POCO。

 插入一个文档

利用collection对象,我们可以将文档插入其中,比如下面的json格式数据:

?
1
2
3
4
5
6
7
8
9
{
   "name": "MongoDB",
   "type": "database",
   "count": 1,
   "info": {
     x: 203,
     y: 102
   }
}

下面我们利用BsonDocument对象组织上面的JSON格式的数据:

?
1
2
3
4
5
6
7
8
9
10
11
var document = new BsonDocument
{
  {"name","MongoDB"},
  {"type","Database"},
  {"count",1},
  {"info",new BsonDocument{
     {"x",203},
     {"y",102}
    }
  }
};

然后我们利用collection对象的InsertOneAsync将上面的数据插入其中:

?
1
collection.InsertOneAsync(doc);

我们都知道Async为后缀的方法都是支持异步的,但是笔者是在控制台项目中演示的所以没有加上这个await,如果读者实在其他的环境中测试的可以根据情况加上。

 插入多个文档

如果需要一次性插入多个文档,我们可以通过InsertManyAsync方法,比如下面的示例我们将插入100条数据:

?
1
2
var documents = Enumerable.Range(0, 100).Select(x => new BsonDocument("counter", x));
collection.InsertManyAsync(documents);

统计文档数量

通过上面的步骤我们已经插入了101条数据,如果在实际开发中我们需要统计数据的数量就可以通过调用CountAsync方法,比如下面的代码:

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

查询链表

利用Find方法我们可以对链表进行查询,Find方法将返回给我们IFindFluent<TDocument,TProjection>对象,该接口属于链式接口,所以能够提供给我们类似jquery那样的链式变成方式去控制查询操作。

查询链表首条数据

为了获取第一条数据我们可以通过调用FirstOrDefaultAsync方法,该方法会返回第一条数据,如果不存在数据则会返回null,比如下面的代码将会显示链表中的第一条数据:

?
1
2
var firstDoc = collection.Find(new BsonDocument()).FirstOrDefaultAsync();
Console.WriteLine(firstDoc.Result.ToString());

如果读者注意最后的输出,会发现一个_id字段,但是我们并没有插入这个字段,这个字段是mongoDB自动加入的,相信很多人都知道它的作用,这里就不详细解释额。

 查询链表中所有数据

如果想将链表中所有的数据都返回可以在Find操作之后调用ToListAsync方法就可以,将会直接返回List<T>类型的结果,比如下面的这段代码:

?
1
var documents = collection.Find(new BsonDocument()).ToListAsync().Result;

针对数量较少的数据情况下,上面这种方式是没有问题,但如果我们需要处理大量的数据,那么我们就不能使用上面的这种方式,就需要利用下面的方式,通过ForEachAsync来完成,因为这个方法会在每条数据返回的时候执行一个回调,从而达到并发处理的目的,比如下面这段代码就演示了如何使用:

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

通过条件查询单条数据

我们可以在调用Find方法的时候传入一个过滤条件,从而在链表中查询我们希望的数据,比如下面这个例子我们将查询字段“counter”的值为71的数据:

?
1
2
3
var filter = Builders<BsonDocument>.Filter.Eq("counter", 71);
var document = collection.Find(filter).FirstAsync().Result;
Console.WriteLine(document);

这里我们需要通过Builders的静态对象Filter中的各种条件方法来构造条件,然后在调用Find方法的将其传入即可。

 通过条件查询多条数据

我们也可以获取多条数据,比如下面这个例子,我们将搜索出所有“counter”的值大于50的数据:

?
1
2
var filter = Builders<BsonDocument>.Filter.Gt("counter", 50);
var document = collection.Find(filter).ForEachAsync(x => Console.WriteLine(x));

当然我们也可以给定一个范围,比如50到70之间:

?
1
2
3
var filterBuilder = Builders<BsonDocument>.Filter;
var filter = filterBuilder.Gt("counter", 50) & filterBuilder.Lt("counter", 70);
collection.Find(filter).ForEachAsync(x => Console.WriteLine(x));

对数据排序

下面我们将在查询的基础之上加上排序,排序只需要在在调用Sort方法时传入对应的参数即可,比如下面的例子,我们将对链表先进行查询,然后排序:

?
1
2
3
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”字段:

?
1
2
3
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:

?
1
2
3
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,那么我们就可以像下面这样来写:

?
1
2
3
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的所有数据:

?
1
2
var filter = Builders<BsonDocument>.Filter.Gt("counter", 100);
var resut = collection.DeleteManyAsync(filter).Result;

到此为止,MongoDB的基础部分就结束了。希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

  1. 原文链接:http://www.cnblogs.com/yaozhenfa/p/4574898.html 

 

延伸 · 阅读

精彩推荐
  • C#VS2012 程序打包部署图文详解

    VS2012 程序打包部署图文详解

    VS2012虽然没有集成打包工具,但它为我们提供了下载的端口,需要我们手动安装一个插件InstallShield。网上有很多第三方的打包工具,但为什么偏要使用微软...

    张信秀7712021-12-15
  • C#深入理解C#的数组

    深入理解C#的数组

    本篇文章主要介绍了C#的数组,数组是一种数据结构,详细的介绍了数组的声明和访问等,有兴趣的可以了解一下。...

    佳园9492021-12-10
  • C#三十分钟快速掌握C# 6.0知识点

    三十分钟快速掌握C# 6.0知识点

    这篇文章主要介绍了C# 6.0的相关知识点,文中介绍的非常详细,通过这篇文字可以让大家在三十分钟内快速的掌握C# 6.0,需要的朋友可以参考借鉴,下面来...

    雨夜潇湘8272021-12-28
  • C#利用C#实现网络爬虫

    利用C#实现网络爬虫

    这篇文章主要介绍了利用C#实现网络爬虫,完整的介绍了C#实现网络爬虫详细过程,感兴趣的小伙伴们可以参考一下...

    C#教程网11852021-11-16
  • C#C#设计模式之Strategy策略模式解决007大破密码危机问题示例

    C#设计模式之Strategy策略模式解决007大破密码危机问题示例

    这篇文章主要介绍了C#设计模式之Strategy策略模式解决007大破密码危机问题,简单描述了策略模式的定义并结合加密解密算法实例分析了C#策略模式的具体使用...

    GhostRider10972022-01-21
  • C#如何使用C#将Tensorflow训练的.pb文件用在生产环境详解

    如何使用C#将Tensorflow训练的.pb文件用在生产环境详解

    这篇文章主要给大家介绍了关于如何使用C#将Tensorflow训练的.pb文件用在生产环境的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴...

    bbird201811792022-03-05
  • C#C#微信公众号与订阅号接口开发示例代码

    C#微信公众号与订阅号接口开发示例代码

    这篇文章主要介绍了C#微信公众号与订阅号接口开发示例代码,结合实例形式简单分析了C#针对微信接口的调用与处理技巧,需要的朋友可以参考下...

    smartsmile20127762021-11-25
  • C#SQLite在C#中的安装与操作技巧

    SQLite在C#中的安装与操作技巧

    SQLite,是一款轻型的数据库,用于本地的数据储存。其优点有很多,下面通过本文给大家介绍SQLite在C#中的安装与操作技巧,感兴趣的的朋友参考下吧...

    蓝曈魅11162022-01-20