zoukankan      html  css  js  c++  java
  • mongodb 查询的用法

    想要在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、连接数据库

    [csharp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. using MongoDB.Bson;  
    2. using MongoDB.Driver;  



    [csharp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    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)查询规则集合

    [csharp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    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 = " ";  
    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里,基本上每个文档结构都不一样。

    查找代码如下:

    [csharp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
      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. }  
  • 相关阅读:
    Python(八)进程、线程、协程篇
    Python(七)Socket编程、IO多路复用、SocketServer
    Python(六)面向对象、异常处理、反射、单例模式
    Python并发编程之多进程
    ORM框架SQLAlchemy
    Python并发编程之IO模型
    Python并发编程之同步异步and阻塞非阻塞
    二分查找
    插入排序
    单向链表
  • 原文地址:https://www.cnblogs.com/klsw/p/5599164.html
Copyright © 2011-2022 走看看