想要在C#中使用MongoDB,首先得要有个MongoDB支持的C#版的驱动。C#版的驱动貌似有很多种,如官方提供的samus。 实现思路大都类似。这里我们用官方提供的mongo-csharp-driver :

下载地址:http://github.com/mongodb/mongo-csharp-driver/downloads

解压之后得到两个dll:

MongoDB.Driver.dll:顾名思义,驱动程序

MongoDB.Bson.dll:序列化、Json相关

然后在我们的程序中引用这两个dll。

2、连接数据库

  1. using MongoDB.Bson;
  2. using MongoDB.Driver;
  1. //数据库连接字符串
  2. const string strconn = "mongodb://127.0.0.1:27017";
  3. //数据库名称
  4. const string dbName = "test";
  5. MongoServer server;
  6. MongoDatabase db;
  7. void Init()
  8. {
  9. //创建数据库链接
  10. server = MongoDB.Driver.MongoServer.Create(strconn);
  11. //获得数据库
  12. db = server.GetDatabase(dbName);
  13. }

3、查询数据

1)查询规则集合

  1. class Users
  2. {
  3. public ObjectId _id;//BsonType.ObjectId 这个对应了 MongoDB.Bson.ObjectId
  4. public string Name { get; set; }
  5. public string Sex { set; get; }
  6. }
  7. const string ENTER = "\r\n";
  8. private void btnQuery_Click(object sender, EventArgs e)
  9. {
  10. //获取Users集合
  11. MongoCollection col = db.GetCollection("Users");
  12. //查询全部集合里的数据
  13. var result1 = col.FindAllAs<Users>().ToList();
  14. StringBuilder sb = new StringBuilder("");
  15. foreach (Users user in (List<Users>)result1)
  16. {
  17. sb.Append(user.Name + ENTER);
  18. }
  19. MessageBox.Show(sb.ToString());
  20. }

这种方式只适合每个文档(document)结构都一样的集合:

但是NoSql诟病关系型数据库的论点之一,就是这种所谓每条记录的结构都要保持一致的情况,因为有些字段不是所有记录的必须。那么,在mongoDB这里,对于集合中文档结构不一致的情况下,上述代码获取不到数据,似乎应该采用如下方式:

2)查询不规则集合

集合情况:

在集合thins里,基本上每个文档结构都不一样。

查找代码如下:

    1. private void btnQuery2_Click(object sender, EventArgs e)
    2. {
    3. //获取thins集合
    4. MongoCollection col = db.GetCollection("thins");
    5. //查询全部集合里的数据
    6. var result1 = col.FindAllAs<BsonDocument>().ToList();
    7. StringBuilder sb = new StringBuilder("");
    8. foreach (BsonDocument bd in (List<BsonDocument>)result1)
    9. {
    10. string name = bd.Contains("name") ? bd.GetValue("name").ToString() : "不存在";
    11. sb.Append(name + ENTER);
    12. }
    13. MessageBox.Show(sb.ToString());
    14. }

mongodb 查询的用法的更多相关文章

  1. Mongodb查询的用法,备注防止忘记

    最近在用这个东西,为防止忘记,记下来. 集合简单查询方法 mongodb语法:db.collection.find()  //collection就是集合的名称,这个可以自己进行创建. 对比sql语句 ...

  2. mongodb查询关于大于小于的用法;

    mongoDB查询操作符: http://www.runoob.com/mongodb/mongodb-operators.html 项目中需要的场景是这样的,每个人每天只能领取一张明信片,换句话说, ...

  3. mongodb聚合管道用法

    基本用法 db.collection.aggregate( [ { <stage> }, ... ] ) stage如下 名称 描述 $addFields 将新的字段添加到文档中,输出的文 ...

  4. 【Mongodb教程 第七课 】MongoDB 查询文档

    find() 方法 要从MongoDB 查询集合数据,需要使用MongoDB 的 find() 方法. 语法 基本的find()方法语法如下 >db.COLLECTION_NAME.find() ...

  5. MongoDB查询转对象是出错Element '_id' does not match any field or property of class

    MongoDB查询转对象是出错Element '_id' does not match any field or property of class   解决方法: 1.在实体类加:[BsonIgno ...

  6. MongoDB查询操作限制返回字段的方法

    这篇文章主要介绍了MongoDB查询操作限制返回字段的方法,需要的朋友可以参考下   映射(projection )声明用来限制所有查询匹配文档的返回字段.projection以文档的形式列举结果集中 ...

  7. mongodb查询文档

    说到查询,我们一般就想起了关系型数据库的查询了,比如:order by(排序).limit(分页).范围查询(大于某个值,小于某个值..,in查询,on查询,like查询等待很多),同样mongodb ...

  8. [转]mongodb 查询条件:关系运算符"$lt", "$lte", "$gt", "$gte", "$ne" 逻辑运算符"$and“, "$or“, "$nor“

    mongodb 查询条件   这节来说说mongodb条件操作符,"$lt", "$lte", "$gt", "$gte" ...

  9. SQL学习:查询的用法(1)

    在SQL servre的使用中,查询的用法是最多的.最重要的,也是最难学习的,因此掌握查询的用法很重要. 先将表的示例上图 员工表: 部门表:                             ...

随机推荐

  1. Java多线程系列--“基础篇”03之 Thread中start()和run()的区别

    概要 Thread类包含start()和run()方法,它们的区别是什么?本章将对此作出解答.本章内容包括:start() 和 run()的区别说明start() 和 run()的区别示例start( ...

  2. Linux驱动开发——__stringify

    在Linux内核中有一个宏__stringify,在include/linux/stringify.h定义如下: #ifndef __LINUX_STRINGIFY_H #define __LINUX ...

  3. Office Visio简介

    Office Visio,是VISIO公司在91年推出的用于制作图表的软件(现在微软收购),在早期它主要用作商业图表制作,后来随着版本的不断提高,新增了许多功能.大多数图形软件程序依赖于艺术技能.Of ...

  4. 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误

    在visual studio 中添加数据库应用时,报错,提示如下: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL ...

  5. Android中动态更新ListView(转)

    在使用ListView时,会遇到当ListView列表滑动到最底端时,添加新的列表项的问题,本文通过代码演示如何动态的添加新的列表项到ListView中.实现步骤:调用ListView的setOnSc ...

  6. Android学习笔记之短信验证码的获取和读取

    PS:最近很多事情都拖拖拉拉的..都什么办事效率啊!!! 还得吐槽一下移动运营商,验证码超过五次的时候,直接把我的手机号封闭.真是受够了. 学习笔记: 1.Android之如何获取短信验证码. 2.如 ...

  7. java并发编程(3):ThreadLocal

    转载:http://www.cnblogs.com/dolphin0520/p/3920407.html 一. 对ThreadLocal的理解 ThreadLocal,很多地方叫做线程本地变量,也有地 ...

  8. redis学习教程之一基本命令

    参阅redis中文的 互动教程(interactive tutorial)来学习的. 目录: 全局操作 get  get incr  自增 del 删除 expire 定时 list  队列 set ...

  9. 在WCF数据访问中使用缓存提高Winform字段中文显示速度

    在我们开发基于WCF访问方式的Winform程序的时候,一般情况下需要对界面显示的字段进行中文显示的解析.如果是硬编码进行中文显示,那么除了不方便调整及代码臃肿外,性能上没有什么问题,但是不建议这样处 ...

  10. iBoxDB的学习与使用

    1. 引言 一次偶然的机会接触到了iBoxDB这样一个小型的嵌入式对象数据库.感觉非常惊讶有这样轻巧的数据库.iBoxDB 本身是一个NOSQL 同时也有关系数据库的特点. 说说iBoxDB的优点: ...