博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mongo——C#操作
阅读量:5242 次
发布时间:2019-06-14

本文共 5647 字,大约阅读时间需要 18 分钟。

  自己练手写了一个MongoDb的泛型类,顺便把一些常用命令整理了一下,做个记录:

1     ///   2     /// Mongo操作类。  3     ///   4     /// 
5 /// 参考:http://www.runoob.com/mongodb/mongodb-tutorial.html 6 /// https://docs.mongodb.com/manual/crud/ 7 /// 命令: 8 /// show dbs,查看db列表; 9 /// show collections,查看集合; 10 /// use test,转换到test类; 11 /// 可以使用db.help()或db.[coll].help()查看相关命令,不做缀诉,下面额外提一些运维排错相关的命令。 12 /// 运维: 13 /// db.getPrevError(),查询之前的错误信息,可以通过db.resetError()来重置错误信息。 14 /// 15 ///
16 public class MongoDao
where T : class 17 { 18 private IMongoCollection
_tCol; 19 20 ///
21 /// 构造函数。 22 /// 23 ///
链接字符串,格式如mongodb://[username:password@]host1[:port1],(示例:mongodb://user:123456@127.0.0.1:27017)。 24 ///
对应的数据库名称。 25 ///
对应的集合名称。 26 public MongoDao(string connStr, string dbName, string colName) 27 { 28 var mClient = new MongoClient(connStr); 29 30 _tCol = mClient.GetDatabase(dbName).GetCollection
(colName); 31 } 32 33 ///
34 /// 集合操作。 35 /// 36 ///
37 /// 命令(列子均已Artcile集合为例,类型:{"_id":1,"User":"新用户","IP":"0.0.0.0","Title":"新标题","Content":"新内容"}): 38 /// db.createCollection(“Artcile”, {size: 20, capped: true, max: 10}),虽然Mongo会自动创建集合,但有时候会有特殊需要,例子中就是创建了一个 39 /// 大小固定的集合,这种集合的插入和按照顺序的查询速度极快,在数据插入达到阈值时会淘汰最早的数据,通常可以应用在特定场景如日志存储。 40 /// db.getCollection("Artcile"),获取指定集合,当然也可以通过db.Artcile这种形式操作。 41 /// db.getCollectionNames(),获取集合列表和show colletions的功能相似。 42 /// db.printCollectionStats(),查看数据集的状态,也可以使用db.Artcile.stats()来查看单个集合的状态。 43 /// db.ensureIndex({Title:1}),创建索引。 44 /// db.Article.getIndexes(),查询当前集合的所有索引,db.Article.reIndex()有类似功能。 45 /// db.Article.dropIndex("Title_1"),按照名称删除指定索引,页可以通过db.Article.dropIdnexes()来删除所有索引。 46 ///
47 public IMongoCollection
MongoCollection 48 { 49 get { return _tCol; } 50 } 51 52 ///
53 /// 添加。 54 /// 55 ///
56 /// 命令: 57 /// db.Article.save({"_id":1,"User":"新用户","IP":"0.0.0.0","Title":"新标题","Content":"新内容"}),添加数据,集合对于列没有固定要求,不过建议固定格式。 58 ///
59 public void Add(T tObj) 60 { 61 var id = ObjectId.GenerateNewId(); 62 _tCol.InsertOne(tObj); 63 } 64 65 66 ///
67 /// 批量添加。 68 /// 69 ///
70 /// 71 ///
72 public void AddMany(List
tObjs) 73 { 74 _tCol.InsertMany(tObjs); 75 } 76 77 ///
78 /// 查找一个。 79 /// 80 ///
81 /// 82 ///
83 public T FindOne(Expression
> filter) 84 { 85 return _tCol.Find(filter).First(); 86 } 87 88 ///
89 /// 查找多个。 90 /// 91 ///
92 /// 命令: 93 /// db.Article.find(),查找所有记录。 94 /// db.Article.distinct("Tilte"),相当于关系型数据库中的distinct。 95 /// db.Article.find({_id:1}),查找id为1的文章。 96 /// db.Article.find({_id:{$lt:2}}),查找id小于2的文章,以此类推,lt表示小于,gt表示大于,gte表示大于等于,lte表示小于等于。 97 /// db.Article.find({_id:{$lt:10,$gt:5}}),查找id小于10大于5的文章,这里的逗号表示一种and关系。 98 /// db.Article.find({$or:[{_id:{$lt:10}},{_id:{$gt:1990}}]}),or的关系需要用数组来表达,这个例子就表示查找id小于10或者大于1990的数据。 99 /// db.Article.find().sort({_id:1}).sort({_id:-1}).skip(10).limit(2),其中的sort表示排序,1表示升序,-1表示降序,skip表示跳过多少条,limit表示取多少条。100 /// db.Article.findOne(),表示返回第一条数据。101 /// db.Article.count(),返回集合的个数。102 ///
103 public List
FindAll(Expression
> filter)104 {105 return _tCol.Find(filter).ToList();106 }107 108 ///
109 /// 按条件删除。110 /// 111 ///
112 /// 命令:113 /// db.Article.remove({_id:1})114 ///
115 public long Delete(Expression
> filter)116 {117 return _tCol.DeleteMany(filter).DeletedCount;118 }119 120 ///
121 /// 按条件更新一个。122 /// 123 ///
124 /// 命令:125 /// db.Article.update({_id:1},{$set:{Title:"测试"}},false,true),更新数据,第三个参数表示是不存在否插入,为false表示数据不存在时不插入;第四个参数表示是否更新多个,为flase表示只更新一个。126 /// db.Article.findAndModify({query:{_id:{$gte:50}},sort:{_id:-1},update:{$set:{Title:"新测试"}}}),查询修改127 ///
128 public long Update(Expression
> filter, T newObj)129 { 130 return _tCol.ReplaceOne(filter, newObj).MatchedCount;131 }132 133 ///
134 /// 按条件更新多个。135 /// 136 ///
137 /// 138 ///
139 public void Update(Expression
> filter, Dictionary
>, object> upd)140 {141 var fd = Builders
.Filter.Where(filter);142 143 UpdateDefinition
ud = null;144 foreach (var up in upd)145 {146 if (ud == null)147 ud = Builders
.Update.Set(up.Key, up.Value);148 else149 ud = ud.Set(up.Key, up.Value);150 }151 _tCol.UpdateMany(fd, ud);152 }153 154 ///
155 /// Map:把一个操作Map到集合中的每一个文档156 /// Shuffle:根据Key分组157 /// Reduce:处理值表中的元素,直到值表中只有一个元素158 /// Finalize:不是必须的,对数据进行格式化操作159 /// 160 public void MapReduce()161 {162 var _mCode = @"function(){if(this._id<100){emit(this._id,{Title:this.Title})}}";163 var _rCode = @"function(key,values){return JSON.stringify(values)}";164 165 166 BsonJavaScript _mjs = new BsonJavaScript(_mCode);167 BsonJavaScript _rjs = new BsonJavaScript(_rCode);168 var mr = _tCol.MapReduce
(_mjs, _rjs).ToList();169 170 }171 }172 173 public class MapType174 {175 public long _id { get; set; }176 177 public MResult value { get; set; }178 }179 180 public class MResult181 {182 public string Title { get; set; }183 }

 

转载于:https://www.cnblogs.com/krockey/p/8515070.html

你可能感兴趣的文章
CentOS 简单命令
查看>>
Linux中修改docker镜像源及安装docker
查看>>
javascript中强制类型转换
查看>>
python学习笔记
查看>>
php+ajax(jquery)的文件异步上传
查看>>
使用&nbsp;SharedPreferences 分类: Andro...
查看>>
TLA+(待续...)
查看>>
python selenium 基本常用操作
查看>>
题解: [GXOI/GZOI2019]与或和
查看>>
Eurekalog
查看>>
LeetCode--169--求众数
查看>>
Copy 函数
查看>>
Android服务之Service(其一)
查看>>
网站sqlserver提权操作
查看>>
PHP变量作用域以及地址引用问题
查看>>
实验四
查看>>
Elastic Stack-Elasticsearch使用介绍(三)
查看>>
MacOS copy图标shell脚本
查看>>
第八章 方法
查看>>
国外常见互联网盈利创新模式
查看>>