今项目使用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,),
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的更多相关文章

  1. mongoose - 让node.js高效操作mongodb

    Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用. ...

  2. 【MongoDB for Java】Java操作MongoDB

    上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过 ...

  3. PHP操作MongoDB学习笔记

    <?php/*** PHP操作MongoDB学习笔记*///*************************//**   连接MongoDB数据库  **////*************** ...

  4. PHP操作Mongodb之增删改查篇

    之前,我讲解过PHP中mongodb扩展的安装,及启动,链接操作[忘记了?去看看吧!PHP操作Mongodb之一].本文主要就是讲在PHP中Mongodb的增加,查询,修改及删除数据的操作. 1.增加 ...

  5. PHP操作Mongodb之高级查询篇

    本文主要讲解PHP中Mongodb的除了增删改查的一些其他操作. 在PHP操作Mongodb之增删改查篇中我们介绍了PHP中Mongodb的增加.删除.修改及查询数据的操作.本文主要是将查询时用到的高 ...

  6. php操作mongodb中的ISODate格式日期

    mongodb 中数据记录的日期格式为"dateCreated" : ISODate("2011-12-20T07:22:50.836Z")经过翻阅php官网中 ...

  7. nodejs操作mongodb

    一.下载地址 https://www.mongodb.com/download-center#community 二.控制台操作mongodb 1.安装完后添加环境变量. 2.在某个根目录下新建dat ...

  8. nodejs操作mongodb数据库封装DB类

    这个DB类也算是我经历了3个实际项目应用的,现分享出来,有需要的请借鉴批评. 上面的注释都挺详细的,我使用到了nodejs的插件mongoose,用mongoose操作mongodb其实蛮方便的. 关 ...

  9. Python 操作 MongoDB

    原文 这篇文章主要介绍了使用Python脚本操作MongoDB的教程,MongoDB作为非关系型数据库得到了很大的宣传力度,而市面上的教程一般都是讲解JavaScript的脚本操作,本文则是基于Pyt ...

  10. Python 操作 mongodb 数据库

    原文地址:https://serholiu.com/python-mongodb 这几天在学习Python Web开发,于 是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样 ...

随机推荐

  1. git 本地文件里内容 操作记录

    本地环境文件合并分支(以下的都分别 commit提交了的) [一.分支[追加] 和 [新增] 新信息 合并主线  情景] 分支内容: dr.find_element_by_id("su&qu ...

  2. 【转】使用JMeter进行负载测试——终极指南

    使用JMeter进行负载测试——终极指南 这篇教程讨论的是JMeter,它是一款基于Java的.集合了几个应用程序.具有特定用途的负载和性能测试工具. 本篇主要涉及的内容: 解释一下JMeter的用途 ...

  3. 1112 Stucked Keyboard

    题意:坏掉的键若被按下,总是重复打出k次.比如,k为3,打出的序列如下—— thiiis iiisss a teeeeeest 坏掉的键是i和e,虽然iiisss中s也出现了3次,但它不是坏掉的键,因 ...

  4. 1032 Sharing

    题意:寻找两个链表的首个公共结点,输出其地址. 思路: 方法1.  如果LinkList1比LinkList2长,则让LinkList1先偏移(len1-len2)个结点,然后,让两个链表的的工作指针 ...

  5. hibernate中dialect的讲解

    RDBMS方言 DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect DB2 OS39 ...

  6. 什么是Ajax和JSON,它们的优缺点

    什么是Ajax??? 术语Ajax用来描述一组技术,它使浏览器可以为用户提供更为自然的浏览体验. Ajax它是“Asynchronous JavaScript + XML的简写” 定义Ajax: Aj ...

  7. SSD知识

    不管什么接口的SSD,一般都由以下部分组成:主控,Flash,板,壳,品牌.下面本佬就这些部分一一发帖,仅供娱乐参考,不作任何推荐和偏向,有不同见解请直接发表,有任何错误,请直接指正,不为吵架,只为娱 ...

  8. flask系列九之使用falsk建立项目总结

    待续.... 源码地址:https://gitee.com/FelixBinCloud/ZhiLiaoDemo/tree/master/ZhiLiao

  9. C#统计网站访问总人数和当前在线人数 Application

    一.打开vitualstudio2010,新建一个网站,然后添加新项,新建一个login.aspx和index.aspx页面.再添加新项,选择全局应用程序类,该页面为Global.asax. 第一步: ...

  10. vue简单路由(二)

    在实际项目中我们会碰到多层嵌套的组件组合而成,但是我们如何实现嵌套路由呢?因此我们需要在 VueRouter 的参数中使用 children 配置,这样就可以很好的实现路由嵌套. index.html ...