驱动

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. UV mapping

    [UV mapping] UV mapping is the 3D modeling process of making a 2D image representation of a 3D model ...

  2. Scala基础:模式匹配和样例类

    模式匹配 package com.zy.scala import scala.util.Random /** * 模式匹配 */ object CaseDemo { def main(args: Ar ...

  3. Anaconda3 ubuntu18.04

    luo@luo-All-Series:~/MyFile/Anaconda3$ luo@luo-All-Series:~/MyFile/Anaconda3$ luo@luo-All-Series:~/M ...

  4. http协议简析(一)

    HTTP:hype-text transfer protocol,超文本传输协议,超文本(html)在网络间(电脑与电脑之间)传输过程中所遵循的一些规则. 两台电脑之间要实现数据传输的条件 1.两台电 ...

  5. 在centos6.3_64bit 上的GO语言开发环境搭建

    1.下载go安装包 http://golang.org/ go1.2.linux-amd64.tar.gz   2.配置环境变量 3.编写helloworld package main import ...

  6. ProxyPattern(23种设计模式之一)

    设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大 ...

  7. 基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证

    基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证 摘自:https://blog.csdn.net/ty1121466568/article/details/811184 ...

  8. PreparedStatement的setDate方法如何设置日期

    pstmt.setString(12, "to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')");这样写不对,应该如何写 该方法用于将指定的参数设置为 ...

  9. CodeForces 339D Xenia and Bit Operations (线段树)

    题意:给定 2的 n 次方个数,对这些数两个两个的进行或运算,然后会减少一半的数,然后再进行异或运算,又少了一半,然后再进行或运算,再进行异或,不断重复,到最后只剩下一个数,要输出这个数,然后有 m ...

  10. Discuz核心函数的解析

    dz采用的是多入口的方式,在每个入口函数你能看到引用,启动核心类的语句(其余省略),如下: require './source/class/class_core.php'; C::app()-> ...