! mongodb 默认是没有用户名和密码的,而且IP和端口都是开放的,请自行做好安全防范的心里准备
对应 SQL的 Database
对应 SQL的 Table
对应 SQL的 Row
对于MongoDB中所有的Document都必须有一个_id字段。
在C#中对于这个"_id"字段可以使用一下的几种操作:
ObjectId [Id|id|_id][ValueType|string] [Id|id|_id]如果吝啬使用Id这个属性名(字段名)的话,也可使用 [BsonId] 这个特性手动的指定映射的Id字段。不论使用的是以上什么方法,在MongoDB中存储的永远会是 _id 。当然,也可以不添加该字段,如果不想在查询的时候报错的话,还是需要进行一些额外的操作的。
对于ObjectId类型的_id,可是使用 ObjectId.GenerateNewId() 生成。
大部分的特性对于插入的影响不大,对于查询有较大的影响。其中忽略额外元素的特性可以进行丢弃_id的操作。
MongoDB 中增删改都提供了One和Many两组,同步和异步两套,也就是4个操作。
对于查询的结果还可以进行进一步的操作。
_collection.Find(filter) .SortBy(_=>_.CreateTime) .Skip(skip) .Limit(limt) .Project(_=>new ProjectDocument(_)) .As<Document>() .ForEachAsync(func);以上所有的操作中查找可以使用 filter definition 也可以使用 lambda 表达式,更改则需要使用 update definition . 所有的definition可以使用 Builders<T> 进行创建,也是自行实例化 DefinitionBuilder<T> 然后构建。以下默认习惯性使用Builders<T>进行构建。
Filter Definition 相当于筛选条件,条件之间可是进行组合。
简单条件
var filter = Builders<Document>.Filter.Eq(_=>_.userId,userId); _collection.Find(filter).ToList(); <=> _collection.Find(_=>_.userId == userId).ToList();条件组合
var filter = Builders<Document>.Filter.Eq(_=>_.userId,userId) &Builders<Document>.Filter.Eq(_=>_.title,title); var filter1 = Builders<Document>.Filter.Eq(_=>_.userId,userId) | Builders<Document>.Filter.Eq(_=>_.title,title); var filter2 = !filter; <=> var filter = Builders<Document>.Filter.And( Builders<Document>.Filter.Eq(_=>_.UserId,userid), Builders<Document>.Filter.Eq(_=>_.Title,title) ); var filter1 = Builders<Document>.Filter.Or( Builders<Document>.Filter.Eq(_=>_.UserId,userid), Builders<Document>.Filter.Eq(_=>_.Title,title) ); var filter2 = Builders<Document>.Filter.Not(filter);更多条件
Builders<Document>.Filter.Lt Builders<Document>.Filter.Lte Builders<Document>.Filter.Ne Builders<Document>.Filter.Gt Builders<Document>.Filter.Gte Builders<Document>.Filter.Not Builders<Document>.Filter.In Builders<Document>.Filter.Nin Builders<Document>.Filter.Exists Builders<Document>.Filter.Regex Builders<Document>.Filter.All Builders<Document>.Filter.Any Builders<Document>.Filter.Size Builders<Document>.Filter.SizeGt Builders<Document>.Filter.SizeGte Builders<Document>.Filter.SizeLt Builders<Document>.Filter.SizeLte Builders<Document>.Filter.OfType and more ...以上只列举了部分的Filter,点击查看的Filter
Update Definition 是更新条目,相比Filter Definition,Update Definition 可是进行链式操作
Builders<Document>.Update.Set(_=>_.title,title) .Set(_=>_.desc,desc);相对于SQL来说,MongoDB中提供的Update操作丰富多彩。除了基本的Set,另外还有对于数组的AddToSet、UnSet等,对于时间有CurrentDate等。点击查看所有Update
MongoDB 中提供了聚合操作可是方便的对文档集合进行操作。其中常用的包括了 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 的错误。
转载于:https://www.cnblogs.com/h1nson/p/9408456.html