C#操作mongodb的一些总结

2 篇文章 0 订阅

引用mongodb库:

Nuget上获取包并安装

添加引用

using MongoDB.Driver;
using MongoDB.Bson;

连接mongodb数据库,并操作mongodb数据库中的document:

public class OpMongodb{
    //连接mongodb的字符串,格式"mongodb://"+mongodb的server地址
    public string _mongodbConntectStr {get;set;}= "mongodb://192.***.***.***:27017";
    //要操作的mongoDB数据库名
    public string mongoDB {get;set;}= "mongodbName";
    //要操作的数据库下的collection名
    public string collection {get;set;}= "collectionName";
    private MongoClient client ;
    private Filter = Builders(BsonDocument).Filter;

    public void ConnectDB(){
        client = new MongoClient(_MongoDBConnectString);
    }

    //遍历mongodb中的collection
    public void OpDb(){
        var mDB = client.GetDatabase(mongoDB);
        var datacollection = mDB.GetCollection<BsonDocument>(collection);
        var Cursor = datacollection.Find(Filter.Empty).ToCursor();//无查询条件,全遍历
        var Cursor = datacollection.Find(Filter.eq("","")).ToCursor;
        while(Cursor.MoveNext())
        {
            foreach(var document in Cursor.Current)
            {
                //获取field,如果没有field,则指定默认值
                var bsonValue = document.GetValue("key","");//返回BsonValue值或者空字符串,BsonValue可能为BsonNull,需要特殊处理
                if(bsonValue.IsBsonNull){
                }else{
                    
                }
                //还有一种方法:直接判断是否存在field
                BsonElement ele;
                if(document.TryGetElement("fieldName",out ele)){
                }else{
                }
                //document.Contains(string name);
                //document.Contains(BsonValue value);
                //同样可以获取到Document的所有相关信息
                //document.Elements;
                //document.Names;
                //document.Values;
                //document.BsonType
                //document.ElementCount
                
                //对于Document中出现的类似Document的字段操作:
                var bValue = Document.GetValue(matchDic[col],"");
                string pvalue = "";
                if(bValue != ""){
                    var pList = bValue.AsBsonArray;
                    foreach (var item in pList)
                    {
                        pvalue += item["名称"].ToString() + ";";
                    }

                }
            }
        }
    }
}

向mongodb中写入数据

public class OpMongodb{
    //连接mongodb的字符串,格式"mongodb://"+mongodb的server地址
    public string _mongodbConntectStr {get;set;}= "mongodb://192.***.***.***:27017";
    //要操作的mongoDB数据库名
    public string mongoDB {get;set;}= "mongodbName";
    //要操作的数据库下的collection名
    public string collection {get;set;}= "collectionName";
    private MongoClient client ;
    private Filter = Builders(BsonDocument).Filter;

    public void ConnectDB(){
        client = new MongoClient(_MongoDBConnectString);
    }

    //遍历mongodb中的collection
    public void WriteToDb(){
        var mDB = client.GetDatabase(mongoDB);
        var datacollection = mDB.GetCollection<BsonDocument>(collection);
        var vModels = new List<WriteModel<BsonDocument>>();
        var Data1 = new DataItem();
        Data1.id = "****";
        Data1.Name = "name1";
        Data1.Age = 29;
        vModels.Add(new InsertOneModel<BsonDocument>(Data1.ToBsonDocument()));
        var Data2 = new DataItem();
        Data2.id = "****";
        Data2.Name = "name2";
        Data2.Age = 19;
        vModels.Add(new InsertOneModel<BsonDocument>(Data2.ToBsonDocument()));
        try{
            datacollection.BulkWrite(vModels,new BulkWriteOptions{IsOrdered = false});
        }catch(MongoBulkWriteException ex)
        {
            failNumb = ex.WriteErrors.Count;
        }
        vModels.Clear();
    }
}

更新数据:

public class OpMongodb{
    //连接mongodb的字符串,格式"mongodb://"+mongodb的server地址
    public string _mongodbConntectStr {get;set;}= "mongodb://192.***.***.***:27017";
    //要操作的mongoDB数据库名
    public string mongoDB {get;set;}= "mongodbName";
    //要操作的数据库下的collection名
    public string collection {get;set;}= "collectionName";
    private MongoClient client ;
    private Filter = Builders(BsonDocument).Filter;

    public void ConnectDB(){
        client = new MongoClient(_MongoDBConnectString);
    }

    //遍历mongodb中的collection
    public void UpdateDb(){
        var update = Buliders<BsonDocument>.Update;
        var database = client.GetDatabase(mongoDB);

        var datacollection = database.GetCollection<BsonDocument>(collection);
        var Cursor = datacollection.Find(Filter.Empty).ToCursor();
        
        while(Cursor.MoveNext()){
            foreach(var document in Cursor.Current){
                UpdateDefinition<BsonDocument> updater = null;
                var id = Document["_id"].AsObjectId;
                updater = update.Set("key1","value1").Set("Key2","value2");
                datacollection.UpdateOne(Filter.eq("_id",id),updater);
            }
        }
    }
}

以上代码全手打,可能会有错误,使用时请注意调试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
操作monodb的c#封装,调用非常方便,可以继承,功能包括: 1、所有数据库操作 2、前台表格类数据获取 public List GetList(List lstColName, Document query, JqGridParam jqParam, ref int count),封装了通用的获取前台表格数据的方法,将在工程中减少大量数据库访问代码,有了这个后对前台表格类查询我们可以不用在Control里使用linq或者封装在Model里然后对前台定义视图类了,使用如下: try { JqGridParam jqParam = new JqGridParam(); jqParam.page = 1; jqParam.rows = 1000; MemberOper memOper = new MemberOper(); MongoBasicOper monOper = new MongoBasicOper(DTName.GROUP_MEMBER); int count = 0; //过滤条件 Document query = new Document(); if (!string.IsNullOrEmpty(find)) { MongoRegex reg = new MongoRegex(".*" + find + ".*"); query.Add(DColName.Name, reg); } query.Add(DColName.GroupId, g); Document[] docStatus = new Document[] { new Document(DColName.Status, RowStatus.Pass), new Document(DColName.Status, RowStatus.Admin) }; query.Add("$or", docStatus); //查询列 List lstColName = new List(); lstColName.Add(DColName.UserId); lstColName.Add(DColName.UserName); //查询数据 var lstRes = monOper.GetListEx(lstColName, query, jqParam, ref count); //转换返回值 JqGrid jg = new JqGrid(); if (count == 0) { return Json(jg.toNull(jqParam), JsonRequestBehavior.AllowGet); } var jsonData = jg.toJson(jqParam, count, lstRes, lstColName); jsonData.param = g; return Json(jsonData, JsonRequestBehavior.AllowGet); } catch (Exception e) { return Json(e.Message, JsonRequestBehavior.AllowGet); }
课程通过实际项目融入常用开发技术架构,讲授风格独特,提供详细上课日志及答疑,赠送配套的项目架构源码注释详细清晰且表达通俗,均能直接在实际项目中应用,正真的物超所值,价格实惠任务作业:综合运用《C#/.Net企业级系统架构设计实战精讲教程》课程所学知识技能设计一个学生成绩管理系统的架构。要求:1.系统基于MVC的三层架构,各层单独建不同的解决方案文件夹。2.采用Model First开发方式,设计架构时只需要设计学生表(TbStudent)和课程表(TbCourse)。学生表必须有的字段是ID、stuName、age;课程表必须有的字段是ID、courseName、content。3.数据访问层采用Entity Framework或NHibernate来实现,必须封装对上述表的增删改查方法。4.必须依赖接口编程,也就是必须要有数据访问层的接口层、业务逻辑层的接口层等接口层。层层之间必须减少依赖,可以通过简单工厂或抽象工厂。5.至少采用简单工厂、抽象工厂、Spring.Net等技术中的2种来减少层与层之间的依赖等。6.封装出DbSession类,让它拥有所有Dal层实例和SaveChanges方法。7.设计出数据访问层及业务逻辑层主要类的T4模板,以便实体增加时自动生成相应的类。8.表现层要设计相关的控制器和视图来验证设计的系统架构代码的正确性,必须含有验证增删改查的方法。9.开发平台一定要是Visual Studio平台,采用C#开发语言,数据库为SQL Server。10.提交整个系统架构的源文件及生成的数据库文件。(注意: 作业需写在CSDN博客中,请把作业链接贴在评论区,老师会定期逐个批改~~)
C# 中使用 MongoDB 进行查询操作,需要使用 MongoDBC# 驱动程序,该驱动程序提供了一组 API 用于实现查询操作。下面我们来分别介绍这些查询操作: 1. 等于查询 等于查询是最常用的查询操作,它用于查询指定字段等于指定值的文档。在 C# 中实现等于查询,可以使用下面的代码: ```c# var filter = Builders<BsonDocument>.Filter.Eq("field", "value"); var result = collection.Find(filter).ToList(); ``` 其中,`field` 是要查询的字段名,`value` 是要查询的值。`Builders<BsonDocument>.Filter.Eq` 方法用于创建等于查询的过滤器,`collection.Find` 方法用于执行查询操作。 2. 大于查询和小于查询 大于查询和小于查询分别用于查询指定字段大于或小于指定值的文档。在 C# 中实现大于查询和小于查询,可以使用下面的代码: ```c# // 大于查询 var filter = Builders<BsonDocument>.Filter.Gt("field", "value"); var result = collection.Find(filter).ToList(); // 小于查询 var filter = Builders<BsonDocument>.Filter.Lt("field", "value"); var result = collection.Find(filter).ToList(); ``` 其中,`Builders<BsonDocument>.Filter.Gt` 方法用于创建大于查询的过滤器,`Builders<BsonDocument>.Filter.Lt` 方法用于创建小于查询的过滤器。 3. 大于等于查询和小于等于查询 大于等于查询和小于等于查询分别用于查询指定字段大于等于或小于等于指定值的文档。在 C# 中实现大于等于查询和小于等于查询,可以使用下面的代码: ```c# // 大于等于查询 var filter = Builders<BsonDocument>.Filter.Gte("field", "value"); var result = collection.Find(filter).ToList(); // 小于等于查询 var filter = Builders<BsonDocument>.Filter.Lte("field", "value"); var result = collection.Find(filter).ToList(); ``` 其中,`Builders<BsonDocument>.Filter.Gte` 方法用于创建大于等于查询的过滤器,`Builders<BsonDocument>.Filter.Lte` 方法用于创建小于等于查询的过滤器。 4. 包含查询 包含查询用于查询指定字段包含指定值的文档。在 C# 中实现包含查询,可以使用下面的代码: ```c# var filter = Builders<BsonDocument>.Filter.In("field", new BsonArray { "value1", "value2", "value3" }); var result = collection.Find(filter).ToList(); ``` 其中,`new BsonArray { "value1", "value2", "value3" }` 是要查询的值列表,`Builders<BsonDocument>.Filter.In` 方法用于创建包含查询的过滤器。 5. 不包含查询 不包含查询用于查询指定字段不包含指定值的文档。在 C# 中实现不包含查询,可以使用下面的代码: ```c# var filter = Builders<BsonDocument>.Filter.Nin("field", new BsonArray { "value1", "value2", "value3" }); var result = collection.Find(filter).ToList(); ``` 其中,`new BsonArray { "value1", "value2", "value3" }` 是要查询的值列表,`Builders<BsonDocument>.Filter.Nin` 方法用于创建不包含查询的过滤器。 以上是 MongoDB 中常用的几种查询操作,在 C# 中可以使用 MongoDBC# 驱动程序实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值