摘要:對于查詢的結果還可以進行進一步的操作。相當于篩選條件,條件之間可是進行組合。除了基本的,另外還有對于數組的等,對于時間有等。閑時更新如有錯誤,多謝指正
安裝
首先需要安裝 MongoDB.Driver 包 nuget
首先的首先,需要安裝好 Mongo 數據庫 下載Mongo
配置好數據庫,構建好連接字符串就可以繼續使用了 連接字符串
數據 數據層次 DataBase! mongodb 默認是沒有用戶名和密碼的,而且IP和端口都是開放的,請自行做好安全防范的心里準備
對應 SQL的 Database
Collection對應 SQL的 Table
Document對應 SQL的 Row
文檔結構 BsonId對于MongoDB中所有的Document都必須有一個_id字段。
在C#中對于這個"_id"字段可以使用一下的幾種操作:
ObjectId [Id|id|_id]
[ValueType|string] [Id|id|_id]
如果吝嗇使用Id這個屬性名(字段名)的話,也可使用 [BsonId] 這個特性手動的指定映射的Id字段。
不論使用的是以上什么方法,在MongoDB中存儲的永遠會是 _id 。
當然,也可以不添加該字段,如果不想在查詢的時候報錯的話,還是需要進行一些額外的操作的。
對于ObjectId類型的_id,可是使用 ObjectId.GenerateNewId() 生成。
幾個常用的特性[BsonId] : (prop) 指定_id字段
[BsonIgnore] : (prop) 在MongoDB中忽略,參考[JsonIgnore]
[BsonRequired] : (prop) 在MongoDB中強制要求
[BsonElement()] : (prop) 指定數據庫中的映射
[BsonExtraElements] : (prop) 該字段為擴展字段
[BsonIgnoreExtraElements] : (class) 忽略額外的字段
大部分的特性對于插入的影響不大,對于查詢有較大的影響。其中忽略額外元素的特性可以進行丟棄_id的操作。
操作MongoDB 中增刪改都提供了One和Many兩組,同步和異步兩套,也就是4個操作。
Insert_collection.InsertOne(new Document(){}); _collection.InsertMany(new ListDelete(){}); _collection.InsertOneAsync(new Document(){}); _collection.InsertManyAsync(new List (){});
_collection.DeleteOne(_=>_.id == id); _collection.DeleteMany(_=>_.userid == userid); _collection.DeleteOneAsync(_=>_.id == id); _collection.DeleteManyAsync(_=>_.userid == userid);Update
_collection.UpdateOne(_=>_.id == id,updateDefinition) _collection.UpdateMany(_=>_.userid = userid,updateDefinition) _collection.UpdateOneAsync(_=>_.id == id,updateDefinition) _collection.UpdateManyAsync(_=>_.userid = userid,updateDefinition)Query
_collection.Find(_=>_.id == id).First(); _collection.Find(_=>_.id == id).FirstOrDefault(); _collection.Find(_=>_.userid == userid).ToList(); _collection.Find(_=>_.id == id).FirstAsync(); _collection.Find(_=>_.id == id).FirstOrDefaultAsync(); _collection.Find(_=>_.userid == userid).ToListAsync(); await _collection.FindAsync(_=>_.userid == userid);
對于查詢的結果還可以進行進一步的操作。
_collection.Find(filter) .SortBy(_=>_.CreateTime) .Skip(skip) .Limit(limt) .Project(_=>new ProjectDocument(_)) .AsCount() .ForEachAsync(func);
_collection.Count(_=>_.userId == userid).Count(); _collection.Count(_=>_.userId == userid).CountAsync();Query One And
_collection.FindOneAndDelete(_=>_.id == id); _collection.FindOneAndReplace(_=>_.id == id, new Document()); _collection.FindOneAndUpdate(_=>_.id == id ,updateDefinition); _collection.FindOneAndDeleteAsync(_=>_.id == id); _collection.FindOneAndReplaceAsync(_=>_.id == id, new Document()); _collection.FindOneAndUpdateAsync(_=>_.id == id ,updateDefinition);Definition
以上所有的操作中查找可以使用 filter definition 也可以使用 lambda 表達式,更改則需要使用 update definition .
所有的definition可以使用 Builders
Filter Definition 相當于篩選條件,條件之間可是進行組合。
簡單條件
var filter = Builders.Filter.Eq(_=>_.userId,userId); _collection.Find(filter).ToList(); <=> _collection.Find(_=>_.userId == userId).ToList();
條件組合
var filter = Builders.Filter.Eq(_=>_.userId,userId) &Builders .Filter.Eq(_=>_.title,title); var filter1 = Builders .Filter.Eq(_=>_.userId,userId) | Builders .Filter.Eq(_=>_.title,title); var filter2 = !filter; <=> var filter = Builders .Filter.And( Builders .Filter.Eq(_=>_.UserId,userid), Builders .Filter.Eq(_=>_.Title,title) ); var filter1 = Builders .Filter.Or( Builders .Filter.Eq(_=>_.UserId,userid), Builders .Filter.Eq(_=>_.Title,title) ); var filter2 = Builders .Filter.Not(filter);
更多條件
Builders.Filter.Lt Builders .Filter.Lte Builders .Filter.Ne Builders .Filter.Gt Builders .Filter.Gte Builders .Filter.Not Builders .Filter.In Builders .Filter.Nin Builders .Filter.Exists Builders .Filter.Regex Builders .Filter.All Builders .Filter.Any Builders .Filter.Size Builders .Filter.SizeGt Builders .Filter.SizeGte Builders .Filter.SizeLt Builders .Filter.SizeLte Builders .Filter.OfType and more ...
以上只列舉了部分的Filter,點擊查看的Filter
Update DefinitionUpdate Definition 是更新條目,相比Filter Definition,Update Definition 可是進行鏈式操作
Builders.Update.Set(_=>_.title,title) .Set(_=>_.desc,desc);
相對于SQL來說,MongoDB中提供的Update操作豐富多彩。除了基本的Set,另外還有對于數組的AddToSet、UnSet等,對于時間有CurrentDate等。點擊查看所有Update
AggregateMongoDB 中提供了聚合操作可是方便的對文檔集合進行操作。其中常用的包括了 Group,Match,Project;
_collection.Aggregate().Match(_ => _.UserId==userid) .Group(_ => new { _.Type }, g => new { Type = g.Key, Count = g.Count() }) .Project(_ => new { UserId = userid, Type = _.Type, Count = _.Count }) .ToList();
需要注意的是,Group和Project中的表達式返回類型對應的都需要是一個對象,在進行映射的時候會轉換成BsonDocument,如果直接使用 Group(_=>_.Type,...)這樣的操作的話,會拋出 無法將 BsonValue 轉化為 BsonDocument 的錯誤。
Tips閑時更新
如有錯誤,多謝指正
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19125.html
摘要:今天看到寫的中的和都錯了,覺得很有意思,所以也研究了一下。但既然用,就是為了用它的靜態檢查,所以要充分關注編譯錯誤提示。很遺憾,同樣的錯誤。的正式名稱是,即那么,現在來說說的結果。因此在我實際工作中遇到類似問題的概率非常低,不糾結 今天看到 @justjavac 寫的《ES6 中的 this & super:babel 和 typescript 都錯了》,覺得很有意思,所以也研究了一下...
閱讀 2684·2021-10-22 09:55
閱讀 2008·2021-09-27 13:35
閱讀 1267·2021-08-24 10:02
閱讀 1478·2019-08-30 15:55
閱讀 1198·2019-08-30 14:13
閱讀 3471·2019-08-30 13:57
閱讀 1975·2019-08-30 11:07
閱讀 2447·2019-08-29 17:12