MongoDB 學習筆記四 C#呼叫MongoDB
阿新 • • 發佈:2018-12-24
驅動
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);
}
}
}
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;
}