MongoDB 学习笔记四 C#调用MongoDB

驱动

C#/.NET Driver VersionMongoDB 2.4MongoDB 2.6MongoDB 3.0
Version 2.0
Version 1.10
Driver Version.NET 3.5.NET 4.0.NET 4.5Mono 2.10Mono 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

posted @ 2017-11-06 16:59  a-du  阅读(254)  评论(0编辑  收藏  举报