1. 程式人生 > >MongoDB 學習筆記四 C#呼叫MongoDB

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等於1document。
};
//查詢
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);
        }
    }
}

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();

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;
}