驱动

C#/.NET Driver Version MongoDB 2.4 MongoDB 2.6 MongoDB 3.0
Version 2.0
Version 1.10
Driver Version .NET 3.5 .NET 4.0 .NET 4.5 Mono 2.10 Mono 3.x
Version 2.0      
Version 1.10

我这里下载1.10版本,framework 4.0环境。

使用

连接

using MongoDB.Bson;
using MongoDB.Driver;
var client = new MongoClient("mongodb://localhost:27017");
var server = client.GetServer();
var database = server.GetDatabase("foo");
var collection = database.GetCollection<BsonDocument>("bar"); await collection.InsertOneAsync(new BsonDocument("Name", "Jack")); var list = await collection.Find(new BsonDocument("Name", "Jack"))
.ToListAsync(); foreach(var document in list)
{
Console.WriteLine(document["Name"]);
}

Document是实体类

using MongoDB.Bson;
using MongoDB.Driver;
public class Person
{
public ObjectId Id { get; set; }
public string Name { get; set; }
}
var client = new MongoClient("mongodb://localhost:27017");
var server = client.GetServer();
var database = server.GetDatabase("foo");
var collection = database.GetCollection<Person>("bar"); await collection.InsertOneAsync(new Person { Name = "Jack" }); var list = await collection.Find(x => x.Name == "Jack")
.ToListAsync(); foreach(var person in list)
{
Console.WriteLine(person.Name);
}

实体类给下面的代码使用

public class Entity
{
public ObjectId Id { get; set; }
public string Name { get; set; }
}

插入

var entity = new Entity { Name = "Tom" };
collection.Insert(entity);
var id = entity.Id; // Insert will set the Id if necessary (as it was in this example)

查找

var query = Query<Entity>.EQ(e => e.Id, id);
var entity = collection.FindOne(query);
// var entity = collection.FindOneByIdAs<Entity>(id); /*
定义一个查询:查询stdid=1的文档
FindOneArgs args = new FindOneArgs {
Query = Query.EQ("stdid", 1),//查询stdid field等于1的document。
};
//查询
var std = collection.FindOneAs<Student>(args);
*/
/*
查询多条
IMongoQuery query = Query.GTE("stdid",2);
var result=collection.FindAs<Student>(Query.GTE("stdid",2));
foreach (var each in result) {
Console.WriteLine(each.stdName);
}
*/

保存

entity.Name = "Dick";
collection.Save(entity);

更新

var query = Query<Entity>.EQ(e => e.Id, id);
var update = Update<Entity>.Set(e => e.Name, "Harry"); // update modifiers
collection.Update(query, update);

删除

var query = Query<Entity>.EQ(e => e.Id, id);
collection.Remove(query);

这是一个完整的示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders; namespace ConsoleApplication1
{
public class Entity
{
public ObjectId Id { get; set; }
public string Name { get; set; }
} class Program
{
static void Main(string[] args)
{
var connectionString = "mongodb://localhost";
var client = new MongoClient(connectionString);
var server = client.GetServer();
var database = server.GetDatabase("test");
var collection = database.GetCollection<Entity>("entities"); var entity = new Entity { Name = "Tom" };
collection.Insert(entity);
var id = entity.Id; var query = Query<Entity>.EQ(e => e.Id, id);
entity = collection.FindOne(query); entity.Name = "Dick";
collection.Save(entity); var update = Update<Entity>.Set(e => e.Name, "Harry");
collection.Update(query, update); collection.Remove(query);
}
}
}

参考:http://mongodb.github.io/mongo-csharp-driver/1.10/getting_started/

LinQ查询

C# driver 1.8版本开始支持Linq查询。

var linquery = from e in collection.AsQueryable<SY.Model.User>()
//where e.age> 22
select e;
linquery=linquery.Where(c=>c.Name=="张三");
int count=linquery.Count();

参考:http://mongodb.github.io/mongo-csharp-driver/1.10/linq/

Document查询方式

未测试,参考地址记录在这里。

//Document docName = new Document { { "字段名1", "输入值1" }, { "字段名2", "输入值2" } };
/// <summary>
/// 根据姓名获取用户信息
/// </summary>
/// <param name="mUserInfo">用户Model类</param>
/// <returns>用户泛型集合</returns>
public List<UserInfo> GetUserByName(UserInfo mUserInfo)
{
List<UserInfo> lsUser = new List<UserInfo>();
using (Mongo mongo = new Mongo("mongodb://localhost"))
{
MongoDatabase mongoDatabase = mongo.GetDatabase("UserInfo") as MongoDatabase;
MongoCollection<Document> mongoCollection = mongoDatabase.GetCollection<Document>("myCollection") as MongoCollection<Document>;
mongo.Connect();
Document docName = new Document { { "FirstName", "aaa" }, { "LastName", "bbb" } };
MongoDB.ICursor<Document> users = mongoCollection.Find(docName); foreach (Document user in users.Documents)
{
UserInfo mUser = new UserInfo();
mUser.FirstName = user["FirstName"].ToString();
mUser.LastName = user["LastName"].ToString();
mUser.CorporationName = user["CorporationName"].ToString();
mUser.Phone = user["Phone"].ToString();
mUser.Email = user["Email"].ToString();
mUser.UserType = user["UserType"].ToString();
lsUser.Add(mUser);
}
} return lsUser;
}

http://weishangxue.blog.163.com/blog/static/21575188201181633811102/ 
http://mikaelkoskinen.net/post/mongodb-aggregation-framework-examples-in-c

MongoDB 学习笔记四 C#调用MongoDB的更多相关文章

  1. MongoDB学习笔记—Linux下搭建MongoDB环境

    1.MongoDB简单说明 a MongoDB是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应用提供可扩展的高性能数据存储解决方案. b MongoDB是一个介于关系 ...

  2. MongoDB 学习笔记(三) MongoDB (replica set) 集群配置

    MongoDB Replica Sets的结构类似于以集群,完全可以把他当成一个集群,因为他确实与集群实现的作用是一样的:如果其中一个节点出现故障,其他的节点会马上将业务接管过来.而无需停机操作 Mo ...

  3. Mongodb学习笔记四(Mongodb聚合函数)

    第四章 Mongodb聚合函数 插入 测试数据 ;j<;j++){ for(var i=1;i<3;i++){ var person={ Name:"jack"+i, ...

  4. MongoDB学习笔记四:索引

    索引就是用来加速查询的.创建数据库索引就像确定如何组织书的索引一样.但是你的优势是知道今后做何种查询,以及哪些内容需要快速查找.比如:所有的查询都包括"date"键,那么很可能(至 ...

  5. MongoDB学习笔记(四) 用MongoDB的文档结构描述数据关系

    MongoDB的集合(collection)可以看做关系型数据库的表,文档对象(document)可以看做关系型数据库的一条记录.但两者并不完全对等.表的结构是固定的,MongoDB集合并没有这个约束 ...

  6. MongoDB学习笔记四—增删改文档下

    $slice 如果希望数组的最大长度是固定的,那么可以将 $slice 和 $push 组合在一起使用,就可以保证数组不会超出设定好的最大长度.$slice 的值必须是负整数. 假设$slice的值为 ...

  7. Mongodb学习笔记五(C#操作mongodb)

    mongodb c# driver(驱动)介绍 目前基于C#的mongodb驱动有两种,分别是官方驱动(下载地址)和samus驱动(下载地址). 本次我们只演示官方驱动的使用方法. 官方驱动文档查看 ...

  8. MongoDB 学习笔记(二)—— MongoDB Shell

    MongoDB自带一个JavaScript shell 可以从命令行中与MongoDB交互,功能非常强大.如在上一节最后一张图所看到,可以执行JavaScript程序. 运行Shell 前提是启动Mo ...

  9. MongoDB学习笔记(三、MongoDB聚合与更新)

    目录: 聚合 更新 更新选择器 ObjectId 更新操作的原子性 聚合: 聚合语法:db.collectionName.aggregate(aggregate_operation) 聚合操作其实就是 ...

随机推荐

  1. Linux实战教学笔记45:NoSQL数据库之redis持久化存储(一)

    第1章 redis存储系统 1.1 redis概述 REmote DIctionary Server(Redis)是一个基于key-value键值对的持久化数据库存储系统.redis和大名鼎鼎的Mem ...

  2. sqlserver for xml

    FOR XML子句有四种最基本的模式 1.AUTO模式:返回数据表为起表名的元素,每一列的值返回为属性:2.RAW模式:返回数据行为元素,每一列的值作为元素的属性: 3.PATH模式:通过简单的XPa ...

  3. Lucene介绍及简单入门案例(集成ik分词器)

    介绍 Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和 ...

  4. go_切片

    go语言中切片相当于array的一个view.其底层实现如下ptr指的是slice中打头的元素.len表示slice的长度.cap表示ptr到整个array的长度 slice可以向后扩展,但不能超过对 ...

  5. 141. Linked List Cycle (List; Two-Pointers)

    Given a linked list, determine if it has a cycle in it. Follow up: Can you solve it without using ex ...

  6. c++ static笔记

    [转]http://www.cnblogs.com/zi-xing/p/4590282.html static的作用 在函数体,一个被声明为static的变量,在这一函数被调用的过程里,其数值维持不变 ...

  7. 关于神经网络中的padding

    参考:https://www.cnblogs.com/willnote/p/6746668.html

  8. 一张图让你看懂HDMI针脚定义

    一张图让你看懂HDMI针脚定义 摘自:http://www.hdmiaoc.com/cjwt-175.html 什么是HDMI线,HDMI插头的每根PIN脚是什么意思? 大部分使用HDMI标准的研发及 ...

  9. hdu 4068 I-number

    #include<stdio.h> #include<string.h> ]; int al; int mysum() //求各位和 { ; al=strlen(a); ; i ...

  10. 假设字符串类似这样的aba和aab,abc和bca就相等,现在随便给你二组字符串,请编程比较他们看是否相等

    public static boolean stringSame(String str1,String str2){ if(str1.length() != str2.length()){//先判断长 ...