热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MongoDB数据库的增删查改操作

本文是对mongodb学习的一点笔记,主要介绍最简单的增删改操作,初学,看着API,有什么错误,希望大家指正:(使用官方驱动)增加操作是最简单的,构造bsonDcument插入即可:方式1,直接构造:MongoServerdbservernewMongoClient(connectionStr).GetServe

本文是对mongodb学习的一点笔记,主要介绍最简单的增删改操作,初学,看着API,有什么错误,希望大家指正:(使用官方驱动)

增加操作是最简单的,构造bsonDcument插入即可:

方式1,直接构造:

MongoServer dbserver = new MongoClient(connectionStr).GetServer();
            MongoDatabase db = dbserver.GetDatabase(dbName);
            MongoCollection collection = db.GetCollection(collectionName);
            dbserver.Connect();
            BsonDocument doc = new BsonDocument();
            doc["Age"] = Int32.Parse(txt_Age.Text);
            doc["Name"] = txt_Name.Text;
            doc["Num"] = txt_Num.Text;
            doc["Introduction"] = txt_Introduction.Text;
            collection.Insert(doc);

方式2,通过实体构造:

1  var student = new Student
2  {
3       Age = Int32.Parse(txt_Age.Text),
4       Name = txt_Name.Text,
5       Num = txt_Num.Text,
6       Introduction = txt_Introduction.Text
7   };
8
9  collection.Insert(student);

关键就是构造删除条件,通过api查到Remove方法的签名:public virtual WriteConcernResult Remove(IMongoQuery query);在网上看到好多写法都是在Remove中传入BsonDocument对象,但是我查源码发现bsonDocument根本没有实现IMongoQuery接口,实现这个接口的是一个叫做QueryDocument的类,同时QueryDocument也继承了BsonDocument对象,而构造BsonDocument和QueryDocument的方式超级多,各种方便,简单写几种:

比如构造如下条件,delete from table where Age>15 &Age<20;

相应的mongodb条件写法:{Age:{$gt:15,$lt:20}},下面就来构造这个条件;

方式1,直接通过bsonDocument构造:

BsonDocument doc = new BsonDocument
{
    { "Age",new BsonDocument{{"$gte",10},{"$lte",15}}}
};

方式2,直接通过QueryDocument构造:与1类似

1  QueryDocument query = new QueryDocument
2  {
3      { "Age",new QueryDocument{{"$gte",10},{"$lte",15}}}
4  };

方式3,直接通过反序列化json字符串:

1  string json = "{ Age:{$gte:10,$lte:15}}";
2  var queryJson = BsonSerializer.Deserialize(json, typeof(BsonDocument)) as BsonDocument;

个人觉得这种方式挺好,如果你mongodb命令熟悉,这种方式挺适合构造复杂条件的

方式4:通过Query类,Query是静态类,封装了各种逻辑条件方法,有泛型和泛型两种方式:

1  var query1 = Query.GT("Age", 10);//大于10;greater than 10
2  var query2 = Query.LT("Age", 15);//小于15;less than 15
3  var query = Query.And(query1, query2);

但是更好的要数泛型方式了:

var query1 = Query.GTE(t => t.Age, 10);
 var query2 = Query.LTE(t => t.Age, 15);
 //var query = Query.And(Query.GTE("Age", 10), Query.LTE("Age", 15));
 var query = Query.And(query1, query2);

最后执行Remove方法即可;

数据显示是必不可少的,查询操作中的条件过滤在删除中已说过,不再赘述,这里先写两种方式(ps:现在了解太浅,只能以笔记形式记录下)

方式1:通过FindAllAs方式或者FindAs方法

1  var query1 = Query.GTE(t => t.Age, 10);
2  var query2 = Query.LTE(t => t.Age, 15);
3  var query = Query.And(query1, query2);
4
5  var list = collection.FindAs(typeof(Student), query);

方式2:通过linq

1   var qList = (from c in collection.AsQueryable()
2                      where c.Age > 10 && c.Age < 15
3                      select c).ToList();

推荐阅读
author-avatar
我们的北京宫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有