设为首页 收藏本站
查看: 1227|回复: 0

[经验分享] MongoDB samus驱动(2)

[复制链接]

尚未签到

发表于 2017-12-15 12:43:24 | 显示全部楼层 |阅读模式
  上一篇中提到驱动的链接方式,这篇给出完整链接代码和使用实例
  数据库完整链接
  

1 static IMongo _mongo = null;  

2 public MongoDrive()//这个类集成了>
3 {  
4     if (_mongo == null)
  
5     {
  
6         var connectionString = new MongoConnectionStringBuilder()
  
7         {
  
8             ConnectionTimeout = TimeSpan.FromSeconds(30),
  
9             ConnectionLifetime = TimeSpan.FromSeconds(10),
  
10             MinimumPoolSize = 1,
  
11             MaximumPoolSize = 10,
  
12             Pooled = true,
  
13         };
  
14         connectionString.AddServer(new MongoServerEndPoint("127.0.0.1", 27017));
  
15         var config = new mongo.Configuration.MongoConfiguration();
  
16         config.ConnectionString = connectionString.ToString();
  
17         config.ReadLocalTime = false;
  
18         _mongo = new Mongo(config);
  
19         _mongo.Connect();
  
20     }
  
21 }
  
22
  
23 public static IMongo Driver
  
24 {
  
25     get
  
26     {
  
27         return _mongo;
  
28     }
  
29 }
  

  添加数据:
  

1 using (IDocumentDrive db = new MongoDB.MongoDrive())  

2 {  

3     db.Driver.Collection("docs").Insert(  

4         new Document("uid",123456)  

5         .Merge("uName","admin")  

6         .Merge("age",new Document("去年八月",DateTime.Now))//Document 值为任何类型,  

7         .Merge("addtime", DateTime.UtcNow)  

8         );  

9 }  

  

Document 为samus驱动定义好的,实际是>  删除数据:
  

  

1 using (IDocumentDrive db = new MongoDB.MongoDrive())  

2     {  

3         db.Driver.Collection("docs").Remove(new mongo.Document("uid", 123456));//删除 UID = 123456 的文档  

4     }  

  更新数据:
  

1 using (IDocumentDrive db = new MongoDB.MongoDrive())  

2 {  

3     db.Driver.Collection("docs").Update(new mongo.Document("uName", "drop attr"), new mongo.Document("uid", 123456));  

4 }  

  更新,除了Update还有一个UpdateAll方法,不做过多解释.
  增,删,改 没什么可说,主要说下查询
  简单数据查询:
  

Document doc = db.Collection("docs").FindOne(new mongo.Document("uid",12346));//查询出一个文档,其数据保护文档全部属性及其子文档,查找不到数据为 null,返回值为Document类型  使用时:
  var age = doc["age"] //因为Document是Dictionary,所以可以直接使用中索引器取值
  doc["uName"] = "mongdb samus";//赋值也是使用索引器
  db.Collection("docs").Update(doc , new mongo.Document("uid", 123456));//之后更新这个文档
  db.Collection("docs").FindAll().Documents//FindAll 自然就是查询全部文档,FindAll()只返回了游标,调用FindAll().Documents才能正式获取到值,
  FindAll().Sort().Skip().Limit()//FindAll 还有几个其他方法,Sort:排序 Skip:跳过条数 Limit:取值条数
  Sort("age", MongoDB.IndexOrder.Descending)//排序
  Skip(27)//跳过 27 条
  Limit(28)//取 28 条
  FindAndModify:这个函数类似 UPDATE,
  FindAndModify(新文档结构,搜索条件,returnNew=true/false)//根据条件搜索文档,找到则修改文档为新文档格式,并返回文档,返回的是新文档,还是修改前的旧文档,根据returnNew参数决定
  还有其他参数如:upsert,是只更新第一个匹配项,还是更新全部匹配项
  

  灵活查询:
  

db.Collection("docs").Find(new Document("age", 27)).Documents;  

Find:函数在项目里用的最多,主要是比较灵活.重载也比较多.  Find(new Document("age", 27), int limit, int skip)//分页查询
  Find(new Document("age", 27))//条件查询
  和FindAll 函数一样,也是要调用 Documents 才能正常取值,否则只能取到游标.
  

Find(Document)//这种形式会返回文档全部结构,当查询用户时会返回用户密码,此时需要传递第二个参数  Find(new Document("age", 27),new Document("age", "").Merge("uid","空字符串即可"))//此时返回的文档格式 只包含 age和uid 两个属性
  

  可以看出只要给Find传递Document,然后接受数据就可以了.那么复杂的肯定是如何构建Document,
  下面说下怎么构建比较常用的查询条件.
  samus驱动有一个Op类.里面定义了条件运算符函数,可以直接使用.
  示例:
  Op.GreaterThan(27)//生成的是mongoDB 的$gt //大于
  Op.GreaterThanOrEqual(27)//生成的是mongoDB 的$gte //大于等于
  Op.In(new string[]{"123465","123457","132458"})// IN 操作
  根据名字可以直接看出具体是什么意思,不全都写注释了.
  Op里没有现成Like函数,我扩展了下:
  

1         public static Document Like(string key)  

2         {  

3             return new Document().Merge(new Op().Add("$regex", key)).Merge(new Op().Add("$options", "$i"));  

4         }  

  如何使用Op构建条件查询:
  //只做示例,条件肯定是永远无法满足的,勿纠结这个
  

new Document("uid","123456")    //uid=123456  
.Merge(
"age",Op.GreaterThan(27))   // 并且 age > 27  .Merge("addtime",Op.GreaterThan(DateTime.Now))   // 并且 addtime > 当前时间  说明:Op.GreaterThan可以比较不同类型,不一定非是 int
.Merge("age",new Document(Op.GreaterThan(15).Merge(Op.LessThanOrEqual(40)))) //并且 ( age>15 && age <40 )  .Merge("uid",new Document("$nin",new string[]{"123","124","124"})) //并且uid 不在 数组中 .
  .Merge("uid",new Document("$in",new string[]{"666","777","888"})) //并且uid 在 666,777,888 中.
  .Merge("face.big","http://www.salsnet.win/1.jpg")//搜索子文档:文档格式大概为{'uName':'abc',"face":{"small":"111.jpg","big":"222.jpg"}}
  

  基本上构建查询文档就这些了,
  分组查询,联合查询,高级查询下次再说

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-424343-1-1.html 上篇帖子: MongoDB Shell 了解使用 下篇帖子: [Node.js]连接mongodb
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表