因为需要,写了一个基于泛型的helper,这样要使用起来方便一点。

为了大家也不重复造轮子,所以发出来希望能帮到谁。

复杂的查询最好用linq,这也是mongodb官方建议的。

mongodb的C#配置

这部分很多文章都提到了,需要注意的是用的驱动与你的mongodb版本还有你.Net好像有点关系

我是mongodb-2.x,.NET4,driver我用的是1.x系列

2.x系列好像我这种配置用不起,大家可以试一试,貌似要.NET要4.5才行

驱动下载地址:

https://github.com/mongodb/mongo-csharp-driver

这里有个小坑,mongodb的数据库连接字符串和mysql是不一样的,很多文章没有提到完整的连接字符串,花半天在官网上看到了

mongodb://username:password@myserver:port/databaseName

Model的编写

其他没什么,但请注意ID、时间的类型,用的是mongdoDB自己的数据类型

这里用了一个虚函数,是为了方便helper里面用泛型获取id

以下是Model的源码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MongoDB.Driver;
using MongoDB.Bson;
namespace WindowsFormsApplication1.Model
{
public abstract class MongoModel
{
public ObjectId id { get; set; }
public BsonDateTime created_at { get; set; }
public BsonDateTime updated_at { get; set; }
} public class AccountModel : MongoModel
{
     //例子
public AccountModel()
{
} public string name { get; set; } }
}

Helper的编写

因为mongodb的操作语句必须大量用到你的Model,因此考虑用泛型来做Helper

用Builder模式的原因无非是觉得好玩,你可以修改代码用构造函数直接初始化

我也没有用静态方法,你有需要可以自己修改

以下是helper的源码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
using MongoDB.Driver;
using MongoDB.Bson;
using MongoDB.Driver.Builders; namespace FrameWork
{
public class MongoHelper<T> where T : WindowsFormsApplication1.Model.MongoModel
{
public string conn;
public string dbName;
public string collectionName; private MongoCollection<T> collection; private MongoHelper()
{ } /// <summary>
/// 设置你的collection
/// </summary>
public void SetCollection()
{
MongoClient client = new MongoClient(conn);
var server = client.GetServer();
var database = server.GetDatabase(dbName);
collection = database.GetCollection<T>(collectionName);
} /// <summary>
/// 你用linq的时候会用到
/// </summary>
public void getCollection()
{
MongoClient client = new MongoClient(conn);
var server = client.GetServer();
var database = server.GetDatabase(dbName);
collection = database.GetCollection<T>(collectionName);
} /// <summary>
/// 查找
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public T Find(IMongoQuery query)
{
return this.collection.FindOne(query);
} /**
* 条件查询用linq
* http://mongodb.github.io/mongo-csharp-driver/1.11/linq/
* */
public List<T> FindAll()
{
return this.collection.FindAll().ToList();
} /// <summary>
/// 修改
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public long Update(T model)
{
BsonDocument doc = BsonExtensionMethods.ToBsonDocument(model);
WriteConcernResult res = this.collection.Update(Query.EQ("_id", model.id), new UpdateDocument(doc));
return res.DocumentsAffected;
} /// <summary>
/// 添加
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public bool Insert(T model)
{
WriteConcernResult res = this.collection.Insert(model);
return res.Ok;
} /// <summary>
/// 删除
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public bool Delete(T model)
{
WriteConcernResult res = this.collection.Remove(Query.EQ("_id", model.id));
return res.Ok;
} /// <summary>
/// 构造器
/// </summary>
/// <typeparam name="T"></typeparam>
public class Builder<T> where T : WindowsFormsApplication1.Model.MongoModel
{
private MongoHelper<T> client; public Builder()
{
client = new MongoHelper<T>();
} public void setConn(string conn)
{
client.conn = conn;
} public void setDbName(string dbName)
{
client.dbName = dbName;
} public void setCollectionName(string collectionName)
{
client.collectionName = collectionName;
} public MongoHelper<T> build()
{
client.SetCollection();
return client;
}
}
}
}

Helper的使用

很简单,我写在demo的form代码里了,注释也写的很清楚什么流程

1.设计好你的model

2.初始化数据库配置

3.build一个helper

4.调用方法

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using System.IO;
using FrameWork; namespace WindowsFormsApplication1
{
/**
*
* MongoDB数据库增删改查DEMO
* 任意拷贝、修改
* 仅供学习
* 曾维周 16/2/25
*
* App独立开发群 533838427
*
* */
public partial class MainForm : DevComponents.DotNetBar.Metro.MetroForm
{
public Model.ConfModel conf = new Model.ConfModel();
private bool isFirst = true;
private string filePath;
private List<Model.AccountModel> accounts = new List<Model.AccountModel>();
private FrameWork.MongoHelper<Model.AccountModel> client;
public MainForm()
{
InitializeComponent();
this.Activated += new EventHandler(Form2_Activated);
} void Form2_Activated(object sender, EventArgs e)
{
if (isFirst)
{
init();
isFirst = false;
}
} void init()
{
/**
*
* step-1
* 配置你的mongodb链接
* 请配置完
*
* */
conf.mongodb_dbAddr = "localhost";
} private void buttonX2_Click(object sender, EventArgs e)
{
/**
*
* step-2
* 请操作前修改好你的model
*
* step-3
* 用builder初始化一个helper
* 当然你也完全可以修改代码直接在构造函数里面初始化
* 我是觉得好玩
*
* */
FrameWork.MongoHelper<Model.AccountModel>.Builder<Model.AccountModel> builder = new FrameWork.MongoHelper<Model.AccountModel>.Builder<Model.AccountModel>();
builder.setCollectionName("你的collection名字");
builder.setConn(conf.mongodb_conn);
builder.setDbName(conf.mongodb_dbName);
client = builder.build();
} private void buttonX1_Click(object sender, EventArgs e)
{
//增
Model.AccountModel account = new Model.AccountModel();
account.name = "love";
client.Insert(account); //删
client.Delete(account); //改
account.name = "not love";
client.Update(account); //查
Model.AccountModel res = client.Find(MongoDB.Driver.Builders.Query<Model.AccountModel>.EQ(xx => xx.id, account.id)); //强烈建议用linq进行查询操作
//http://mongodb.github.io/mongo-csharp-driver/1.11/linq/
//var query = collection.AsQueryable<Model.AccountModel>().Where(e => e.FirstName == "John"); } }
}

参考资料

http://mongodb.github.io/mongo-csharp-driver/1.11/linq/

http://blog.csdn.net/haukwong/article/details/7840158

http://www.cnblogs.com/viprx/archive/2012/09/07/2674637.html

demo下载

链接: http://pan.baidu.com/s/1qX3vfdE 密码: buh2

P.S.

希望能帮助到谁

自己建的一个群,希望广结英豪,尤其是像我一样脑子短路不用react硬拼anroid、ios原生想干点什么的朋友。

App独立开发群 533838427

用c#操作Mongodb(附demo)的更多相关文章

  1. Koa 操作 Mongodb 数据库

    node-mongodb-native的介绍 使用基于官方的 node-mongodb-native 驱动,封装一个更小.更快.更灵活的 DB 模块, 让我们用 nodejs 操作 Mongodb 数 ...

  2. Asp.net MVC集成Google Calendar API(附Demo源码)

    Asp.net MVC集成Google Calendar API(附Demo源码) Google Calendar是非常方便的日程管理应用,很多人都非常熟悉.Google的应用在国内不稳定,但是在国外 ...

  3. java操作mongodb & springboot整合mongodb

    简单的研究原生API操作MongoDB以及封装的工具类操作,最后也会研究整合spring之后作为dao层的完整的操作. 1.原生的API操作 pom.xml <!-- https://mvnre ...

  4. Python操作MongoDB和Redis

    1. python对mongo的常见CURD的操作 1.1 mongo简介 mongodb是一个nosql数据库,无结构化.和去中心化. 那为什么要用mongo来存呢? 1. 首先.数据关系复杂,没有 ...

  5. C#开发微信公众平台-就这么简单(附Demo)转载

    C#开发微信公众平台-就这么简单(附Demo)  来源:https://www.cnblogs.com/xishuai/p/3625859.html#!comments 写在前面 阅读目录: 服务号和 ...

  6. Android 浮动窗口进阶——画中画,浮动视频(附Demo)

    今天继续上一篇Android顶层窗口.浮动窗口的进阶应用.上一篇主要讲解了WindowManager服务和如何使用WindowManager编写一个顶层窗口.今天主要是讲讲如何在顶层窗口里面播放视频, ...

  7. C# 操作 MongoDB

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

  8. PHP操作MongoDB数据库的示例

    http://www.jquerycn.cn/a_8137 本节内容:PHP操作MongoDB数据库的简单示例. Mongodb的常用操作参看手册,php官方的http://us2.php.net/m ...

  9. FMDB的使用方法(附Demo)

    http://www.jianshu.com/p/54e74ce87404 最近在项目中需要在多个页面对同样的数据进行相关操作,于是便用到了FMDB数据库操作,以下便是FMDB的一些简单的使用方法.附 ...

随机推荐

  1. Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作

    2 Mongodb CRUD 操作 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mong ...

  2. DGbroker三种保护模式的切换

    1.三种保护模式 – Maximum protection 在Maximum protection下, 可以保证从库和主库数据完全一样,做到zero data loss.事务同时在主从两边提交完成,才 ...

  3. Autofac全面解析系列(版本:3.5) – [使用篇(推荐篇):1.类型注册]

    前言 Autofac Autofac是一套高效的依赖注入框架. Autofac官方网站:http://autofac.org/ Autofac在Github上的开源项目:https://github. ...

  4. log4j 日志信息的引入(通用版)——解决项目运行过程中的日志信息

    定义 log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程 ...

  5. jquery图片时钟

    一.生成数字时钟 <script src="http://code.jquery.com/jquery-latest.js"></script> <s ...

  6. POJ 1584 A Round Peg in a Ground Hole --判定点在形内形外形上

    题意: 给一个圆和一个多边形,多边形点可能按顺时针给出,也可能按逆时针给出,先判断多边形是否为凸包,再判断圆是否在凸包内. 解法: 先判是否为凸包,沿着i=0~n,先得出初始方向dir,dir=1为逆 ...

  7. 升级Flash Builder 4.6中的Flash Player版本

    测试有效 本人按此方法升级到了flash player 15 Adobe自发布Flash Builder 4.6后,就暂停了Flash Builder新版本的发布.但AIR和FlashPlayer版本 ...

  8. nginx集群报错“upstream”directive is not allow here 错误

    nginx集群报错“upstream”directive is not allow here 错误 搭建了一个服务器, 采用的是nginx + apache(多个) + php + mysql(两个) ...

  9. C语言操作文件

    #include <stdio.h> struct stu{ ]; int num; int age; ]; }boya[],boyb[]; struct stu *pa,*pb; mai ...

  10. 夯实基础之php学习-1基础篇

    1,单引号和双引号的区别 单引号表示字符串,双引号能解析字符串中的变量,所以,如果没有变量,尽量用单引号,加快解析速度 当字符串需要单引号或者双引号的时候,可以用转义字符代替 2,类型转换 通过(bo ...