MongoDB 学习笔记四 C#调用MongoDB

驱动

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

时间: 2024-10-13 23:34:37

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

MongoDB 学习笔记二:安装MongoDB

1.下载MongoDB MongoDB 提供了可用于 32 位和 64 位系统的预编译二进制包,你可以从MongoDB官网下载安装,MongoDB 预编译二进制包下载地址:https://www.mongodb.com/download-center#community.注意:在 MongoDB 2.2 版本后已经不再支持 Windows XP 系统.最新版本也已经没有了 32 位系统的安装文件. 2.安装MongoDB 我下载的是mongodb-win32-x86_64-2008plus-ss

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

第四章 Mongodb聚合函数 插入 测试数据 for(var j=1;j<3;j++){ for(var i=1;i<3;i++){ var person={ Name:"jack"+i, Age:i, Address:["henan","wuhan"], Course:[ {Name:"shuxue",Score:i}, {Name:"wuli",Score:i} ] } db.DemoTe

MongoDB学习笔记四:索引

索引就是用来加速查询的.创建数据库索引就像确定如何组织书的索引一样.但是你的优势是知道今后做何种查询,以及哪些内容需要快速查找.比如:所有的查询都包括"date"键,那么很可能(至少)需要建立一个关于"date"的索引.如果要查询用户名,则不必索引"user_num"键,因为根本不会对其进行查询.现在要依照某个键进行查找:> db.people.find({"username" : "mark"})当

MongoDB学习笔记&lt;四&gt;

今天继续学习MongoDB的相关知识,主要包括如下: --find详解 --分页与排序 --游标和其他知识 1.指定返回的键 db.person.find({},{"_id":0,"name":1,"country":1})这样就只把name键和country键查询出来了,注意其他的如果不写默认不显示,但是如果_id如果不写,默认是显示的. 2.查询条件 db.person.find({"age":{$gte:25,$lte:

【MongoDB学习笔记6】深入MongoDB的创建/插入(insert)

简单单个文档插入用insert方法: > db.post.insert({"bar":"baz"});     WriteResult({ "nInserted" : 1 }) 批量插入,用insert方法(参数要是一个文档数组): > db.post.insert([{"_id":0},{"_id":1},{"_id":2}]);    BulkWriteResult({ 

【MongoDB学习笔记3】处理MongoDB连接错误

安装MongoDB后第一次启用shell登录 mongo 会出现一下的错误: warning: Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused 用一下命令查看以下相关的信息: mongod –v 输出以下信息: 2014-12-31T22:39:39.586-0800 shardKeyTest passed    2014-12-31T22:39:39.587-0800 isInRangeTes

【MongoDB学习笔记8】深入MongoDB的更新(update)操作:修改器$set

MongoDB中文档存入数据库后用update方法更新文档,update方法有两个参数,例如 update(args1,args2) args1是指查询文档的条件: args2是指对查询到的文档进行什么样的修改: 一.文档替换 > joe1= db.post.findOne({"age":20}) {         "_id" :  ObjectId("54a530c3ff0df3732bac1680"),         "i

【MongoDB学习笔记7】深入MongoDB的删除(remove/drop)操作

先看集合post中文档信息: > db.post.find();     { "_id" : ObjectId("54a51cfd7f46906f81b7adcd"), "bar" : "baz" }     { "_id" : 0 }     { "_id" : 1 }     { "_id" : 2 }     { "_id" : 5, 

【MongoDB学习笔记9】深入MongoDB的更新(update)操作:修改器$inc

ongoDB中文档存入数据库后用update方法更新文档,update方法有两个参数,例如 update(args1,args2) args1是指查询文档的条件: args2是指对查询到的文档进行什么样的修改: $inc用来增加已用的键值,如果键不存在就创建: $Inc只能修改的键值必须为整数.长整型和双精度浮点型,不能是其他类型. 使用$inc增加键值: > db.post.findOne({"id":0})    {             "_id" :