C# 操作 MongoDB的示例demo

今项目使用Mongodb,C#操作MongoDB使用MongoDB.Driver.dll库(Nuget),写了个小Demo,如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using MongoDB.Driver;

namespace MongoBase
{
  internal class MongoBase
  {
    private static string _connStr = "mongodb://root:123456@127.0.0.1:27017";
    private static string _dbName = "test";

    private static MongoUrl url = new MongoUrl(_connStr);
    private static MongoClient client = new MongoClient(url);
    public static IMongoDatabase db = client.GetDatabase(_dbName);
  }

  public class MongoHelper<TEntity>
  {
    public string Name => typeof(TEntity).Name;
    public IMongoCollection<TEntity> Collection => MongoBase.db.GetCollection<TEntity>(Name);
    public List<TEntity> Queryable => Collection.AsQueryable().ToList();

    public FilterDefinitionBuilder<TEntity> Filter => Builders<TEntity>.Filter;

    public UpdateDefinitionBuilder<TEntity> Update => Builders<TEntity>.Update;

    public ProjectionDefinitionBuilder<TEntity>Projection=> Builders<TEntity>.Projection;
  }

}
using System;
using System.Collections.Generic;
using System.Text;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;

namespace MongoBase
{
  public class EntityBase
  {
    public EntityBase()
    {
      _id = ObjectId.GenerateNewId();
      createTime = DateTime.Now;
      isDelete = false;
      id = _id.ToString();
    }
    [BsonId]
    public ObjectId _id { get; set; }
    public string id { get; set; }

    public DateTime? createTime { get; set; }

    public bool? isDelete { get; set; }

  }

}
using MongoBase;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;

namespace ConsoleApp5
{
  internal class Video : EntityBase
  {
    public string Title { get; set; }

    public string Category { get; set; }

    public int Minutes { get; set; }

    public string Comments { get; set; }
  }
}
using System;
using System.Collections.Generic;
using MongoBase;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Linq;

namespace ConsoleApp5
{
  class Program
  {
    static void Main(string[] args)
    {
      MongoHelper<Video> videoHelper = new MongoHelper<Video>();

      //新增
      videoHelper.Collection.InsertOne(new Video()
      {
        Title = "ggg"
      });
      //查找集合
      var list = videoHelper.Collection.Find(videoHelper.Filter.Eq(e => e.Category, "Horror")).ToList();

      list = videoHelper.Collection.Find(videoHelper.Filter.Eq(e => e.Title, "ggg")).ToList();

      //方式一:拼接查找条件
      List<FilterDefinition<Video>> listFilter = new List<FilterDefinition<Video>>()
      {
        videoHelper.Filter.Eq(e=>e.Minutes,118),
        videoHelper.Filter.Eq(e=>e.Title,"The Perfect Developer")
      };

      //根据查找多个条件筛选集合
      list = videoHelper.Collection.Find(videoHelper.Filter.And(listFilter)).ToList();

      //方式二:拼接查找条件
      var filter = videoHelper.Filter.Eq(e => e.Title, "cys") & videoHelper.Filter.Eq(e => e.Category, "cys");

      list = videoHelper.Collection.Find(filter).ToList();

      //拼接更新字段
      var updateDefinition = new List<UpdateDefinition<Video>>()
      {
        videoHelper.Update.Set(e=>e.Title, "cys"),
        videoHelper.Update.Set(e=>e.Category, "cys")
      };

      //按照条件更新
      videoHelper.Collection.UpdateMany(videoHelper.Filter.And(listFilter),
        videoHelper.Update.Combine(updateDefinition));

      //删除
      videoHelper.Collection.DeleteOne(videoHelper.Filter.Eq(e => e.Title, "Lost In Frankfurt am Main"));

      //获取某个字段
      filter = videoHelper.Filter.Eq(e => e.Title, "ggg");
      var bson = videoHelper.Collection.Find(filter).Project(videoHelper.Projection.Include(e => e.Title).Exclude(e => e._id)).FirstOrDefault();
    }
  }
}

注:时间类型的属性,存入MongoDB后会比北京时间少8小时,是由于默认写入的是世界标准时间,可在时间类型属性上添加

[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime createTime { get; set; }

的特性,这样取出来之后就是北京时间。

以上就是C# 操作 MongoDB的示例demo的详细内容,更多关于C# 操作 MongoDB的资料请关注我们其它相关文章!

(0)

相关推荐

  • C# 对MongoDB 进行增删改查的简单操作实例

    运用到的MongoDB支持的C#驱动,当前版本为1.6.0 下载地址:https://github.com/mongodb/mongo-csharp-driver/downloads 1,连接数据库 复制代码 代码如下: /// <summary>        /// 数据库连接         /// </summary>        private const string conn = "mongodb://127.0.0.1:27017";     

  • C#简单操作MongoDB的步骤全纪录

    前言 MongoDB是一款由C++编写的高性能.开源.无模式的常用非关系型数据库产品,是非关系数据库当中功能最丰富.最像关系数据库的数据库.它扩展了关系型数据库的众多功能,例如:辅助索引.范围查询.排序等. MongoDB主要解决的是海量数据的访问效率问题,它作为分布式数据崛起后,使用较多的一款非结构数据库,必然有其值得称道之处,它的主要功能特性如下: 1)面向集合的存储,适合存储对象及JSON形式的数据. 2)动态查询,MongoDB支持丰富的查询表达式.查询指令使用JSON形式的标记,可轻易

  • Mongodb在CSharp里实现Aggregate实例

    今天主要用了一个mongodb.driver里的分组,事实上在网上介绍这方面的文章非常少,以至于我在出现问题后,无法找到一个正确的解决方案,最后还是通过异常信息找到的解决方法,所以感觉自己更应该去写一篇关于如何在C#驱动里进行聚合Aggregate的文章! /// <summary> /// 返回UI消息树 /// </summary> /// <returns></returns> public static string GetMongoLog(Date

  • MongoDB实现基于关键词的文章检索功能(C#版)

    我的实现目标是: 可以通过一个或多个关键词搜索到文章. 可以通过文章的关键词列表查询到其相关文章. 查询到的结果依据相关程度降序排列. 查询速度要够快.(理论上关键词检索比全文检索要快很多的) 在网上找了一大圈,就没有一个靠谱的方法,基本都是只能传入单词来检索,而且基本都没有提供C#驱动版本的代码,于是乎自己研究出了这个实现方案: 首先要求使用标签.分词.关键词提取组件对文章对应的关键词进行提取,然后作为数组格式,存入文章的Keywords字段中. 核心检索代码: /// <summary>

  • c#操作mongodb插入数据效率

    mongodb的数据插入速度是其一个亮点,同样的10000条数据,插入的速度要比Mysql和sqlserver都要快,当然这也是要看使用者怎么个使用法,你代码如果10000次写入使用10000次连接,那也是比不过其他数据库使用事务一次性提交的速度的. 同样,mongo也提供的一次性插入巨量数据的方法,因为mongodb没有事务这回事,所以在在C#驱动里,具体方法是InsertManyAsync()一次性插入多个文档.与之对应的是InsertOneAsync,这个是一次插入一个文档: Insert

  • MongoDB入门教程之C#驱动操作实例

    作为系列的最后一篇,得要说说C#驱动对mongodb的操作,目前驱动有两种:官方驱动和samus驱动,不过我个人还是喜欢后者, 因为提供了丰富的linq操作,相当方便. 官方驱动:https://github.com/mongodb/mongo-csharp-driver/downloads.下载后,还提供了一个酷似msdn的帮助文档. samus驱动:https://github.com/samus/mongodb-csharp/downloads. 下面就具体看看samus驱动,https:

  • C#中如何将MongoDB->RunCommand结果映射到业务类的方法总结

    前言 一直没实际用过MongoDB,最近有个项目中用了用,踩了一些坑.这篇文章会介绍将MongoDB->RunCommand结果映射到业务类时碰到的问题,以及对各种方法的探索. Collection中的数据是这样的: 使用find命令查询数据: db.runCommand({"find":"test", limit:2, sort:{AddTime:-1}}) 查询返回的数据结构是这样的,需要的数据在firstBatch中: { "cursor&qu

  • mongodb使用c#驱动数据插入demo

    Mongodb提供了多种开发语言的驱动,java,python,c++,c# 等,这里选用c#驱动作为测试: 首先上mongo官网下载驱动.Ps:官方网站经常连接不顺利. 还不如直接在vs的nuget管理包中搜索mongoDB.driver. 需要引入的命名空间: using MongoDB.Bson; using MongoDB.Driver; Driver是驱动核心,Bson是和数据格式相关的: 定义一个mongo客户端,一个mongodb,一个数据集合: protected staticI

  • 详解MongoDB for C#基础入门

    笔者这里采用的是mongoDB官网推荐使用.net驱动: http://mongodb.github.io/mongo-csharp-driver/2.0/getting_started/quick_tour/ 有关于MongoDB的安装读者可以参考其他的博客,对于基本的学习来说并不需要进行过多的配置. 创建连接 这一步骤跟ADO.NET连接到数据库的步骤是一样的,ADO.NET是利用SqlConnection连接数据库,而MongoDB则使用MongoClient连接,并在构造函数中将连接字符

  • C#中使用1.7版本驱动操作MongoDB简单例子

    复制代码 代码如下: //创建数据库链接 //在1.7的版本驱动中这样写是会报 MongoServer方法已过时的 //MongoServer server =  MongoDB.Driver.MongoServer.Create(strconn); //带有用户名,密码的如下写法,不带的则直接ip+端口就可以 const string connectionString = "mongodb://city:liyang@192.168.1.211:27017"; //得到一个客户端对象

  • c# 插入数据效率测试(mongodb)

    mongodb的数据插入速度是其一个亮点,同样的10000条数据,插入的速度要比Mysql和sqlserver都要快,当然这也是要看使用者怎么个使用法,你代码如果10000次写入使用10000次连接,那也是比不过其他数据库使用事务一次性提交的速度的. 同样,mongo也提供的一次性插入巨量数据的方法,因为mongodb没有事务这回事,所以在在C#驱动里,具体方法是InsertManyAsync()一次性插入多个文档.与之对应的是InsertOneAsync,这个是一次插入一个文档: Insert

  • 关于C#生成MongoDB中ObjectId的实现方法

    ObjectId介绍在MongoDB中,文档(document)在集合(collection)中的存储需要一个唯一的_id字段作为主键.这个_id默认使用ObjectId来定义,因为ObjectId定义的足够短小,并尽最大可能的保持唯一性,同时能被快速的生成. ObjectId 是一个 12 Bytes 的 BSON 类型,其包含:1.4 Bytes 自纪元时间开始的秒数2.3 Bytes 机器描述符3.2 Bytes 进程ID4.3 Bytes 随机数 从定义可以看出,在同一秒内,在不同的机器

随机推荐