MongoDB使用總結(C#版 潘鵬)
阿新 • • 發佈:2018-12-24
簡介
MongoDB是非關係型、文件型的資料庫,方便之處在於可以直接存取class型別……官網定期會開設Free的課程,上一個專案中使用到MongoDB,現在我做的專案用的是EF,所以想將MongoDB用過的方法、注意的事項和一些想法總結一下,畢竟,如果再次使用的話林林總總去拼湊還是要浪費時間的。
DLL
(1) MongoDB.Bson.dll
(2) MongoDB.Driver.dll
軟體
很好的視覺化軟體,MongoVUE
方法
連線
//Mongo資料庫名稱
private MongoDatabase Mg_db;
//Mongo資料庫集合名稱
public MongoCollection Mg_col;
//MongoServer
private MongoServer mongoServer;
//連線字串(以mongodb://開頭)
string connectionString = "mongodb://localhost";//或者是192.xxx.xxx.xxx
//string constr = "mongodb://" + ip + ":" + port; //連線ip和該port
//連線Mongo資料庫
var client = new MongoClient(connectionString);
//得到一個客戶端引用
mongoServer = client.GetServer();
建立資料庫
Mg_db = mongoServer.GetDatabase(dbName);
//dbName是新庫的名字
//如果已有dbName這個庫,那Mg_db是get這個庫,否則就是建立
建立表(集合)
Mg_col = Mg_db.GetCollection<T>(connectionName);
//connectionName是新表的名字
//如果該庫已有connectionName這個表,那Mg_col 是get這個表,否則就是建立
在表中插入資料
public void Insert<T>(string dbName, string connectionName, T t)
{
Mg_db = mongoServer.GetDatabase(dbName); //get 某個庫
MongoCollection collection = Mg_db.GetCollection<T>(connectionName); //get該庫某個表
collection.Insert(t); //插入(任意型別)
}
在表中刪除資料
public void delete<T>(string dbName, string connectionName, string key, BsonValue value)
{
Mg_db = mongoServer.GetDatabase(dbName);
Mg_col = Mg_db.GetCollection<T>(connectionName);
var query = Query.EQ(key, value);
//查詢條件,eg:我要刪除name是張三的該條資料,key,欄位名,value是張三
Mg_col.Remove(query);
}
更新表中的某一條資料
public void UpData(string dbName, string connectionName, string key, BsonValue value, People t)
{
Mg_db = mongoServer.GetDatabase(dbName);
Mg_col = Mg_db.GetCollection(connectionName);
var query = Query.EQ(key, value);
People temp = Mg_col.FindOneAs<People>(query);
//根據查詢條件獲取表中People型別的資料temp,這也是我們要更新的資料
t.id = (temp as People).id;
//t是People型別的一條新資料,它拿到要更新資料的id
Mg_col.Update(query, Update.Replace(t));
}
查詢某個表符合條件的物件並返回
public T Find<T>(string dbName, string connectionName, string key, BsonValue value)
{
Mg_db = mongoServer.GetDatabase(dbName);
MongoCollection collection = Mg_db.GetCollection<T>(connectionName);
var query = Query.EQ(key, value);
T result = collection.FindOneAs<T>(query);
return result;
}
查詢某個表符合條件的物件個數
public long FindSameNameCollectionNum(string dbName, string collcetionName, string key, BsonValue value)
{
Mg_db = mongoServer.GetDatabase(dbName);
Mg_col = Mg_db.GetCollection(collcetionName);
var query = Query.EQ(key, value);
long count = Mg_col.Count(query);
return count;
}
獲取某個表中的所有物件
public List<T> GetProjectArray<T>(string dbName, string connectionName)
{
Mg_db = mongoServer.GetDatabase(dbName);
Mg_col = Mg_db.GetCollection(connectionName);
//獲取該集合所有物件
var result = Mg_col.FindAllAs<T>();
List<T> pList = new List<T>();
pList.AddRange(result);
return pList;
}
儲存影音文字資料放在GridFS
MongoDB中每個庫對應一個GridFS資料夾用來存放影音文字……
可以在這裡用程式新增
可以直接在MongoVUE中新增
public void AddFileInGridFS(string dbName, string filePath)
{
Mg_db = mongoServer.GetDatabase(dbName);
MongoGridFS gridfs = Mg_db.GridFS;
gridfs.Upload(filePath);
}
取出放在GridFS中的資料
public void LoadFileInGridFS(string dbName, string fileName)
{
Mg_db = mongoServer.GetDatabase(dbName);
MongoGridFS gridfs = Mg_db.GridFS;
gridfs.Download(fileName);
}
取出放在GridFS中的資料儲存在Byte[]中
public byte[] ReadFileFromfs(string dbName, string fileName, byte[] bytes)
{
Mg_db = mongoServer.GetDatabase(dbName);
MongoGridFS gridfs = Mg_db.GridFS;
MongoGridFSStream gridFileStream = gridfs.OpenRead(fileName);
bytes = new byte[gridFileStream.Length];
gridFileStream.Read(bytes, 0, bytes.Length);
return bytes;
}
注意事項
1.庫名不可以是中文,會報錯。
2.private的資料無法存入MongoDB中。
3.要存入的class,結構中新增using MongoDB.Bson;並新增 public ObjectId id { get; set; },這個id存入後自增長。
體會
1.MongoDB的結構庫—-集合—-物件,這裡的集合就是表,但是我說的是”集合“,以至於上面的方法中我定義的都是collection,同樣的,我強調的還有物件這個概念
2.一個表可以存多種型別的資料,但是最好不要這樣,讀取的時候很麻煩,拆箱裝箱極易錯,還是一個表一種型別為好。