因为需要,写了一个基于泛型的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. 烂泥:apache密码生成工具htpasswd的应用

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 1. htpasswd的作用与安装 2. htpasswd命令详解 3. htpasswd的实例 4. htpasswd的应用 一.htpasswd的作 ...

  2. 烂泥:CentOS6.5挂载windows共享文件夹

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 由于工作需要,需要把本机的文件夹共享出去,然后让CentOS服务器临时使用下. 服务器使用的是CentOS系统,而本机使用的win7系统.考虑到是临时使 ...

  3. 工作中常用的Linux命令:mkdir命令

    本文链接:http://www.cnblogs.com/MartinChentf/p/6076075.html (转载请注明出处) 在Linux系统中,mkdir命令用来创建一个目录或一个级联目录. ...

  4. 网络基本概念备忘:MAC地址,端口,HTTP状态码

    MAC地址 英文MAC Address 英文全称: Media Access Control Address 别称:硬件位址 用途:定义网络设备位置 表示:十六进制数,6 Byte 特点:产品出产后M ...

  5. css3常用动画+动画库

    一.animates.css animate.css是来自dropbox的工程师Daniel Eden开发的一款CSS3的动画效果小类库.包含了60多款不同类型的CSS3动画,包括:晃动,闪动,各种淡 ...

  6. [转]com.devicepush.cordova-phonegap Device Push Notification Plugin

    本文转自:https://www.npmjs.com/package/com.devicepush.cordova-phonegap Device Push Notification Plugin D ...

  7. [转]AngularJS fixed header scrollable table directive

    本文转自:http://pointblankdevelopment.com.au/blog/angularjs-fixed-header-scrollable-table-directive This ...

  8. 图的全局最小割的Stoer-Wagner算法及例题

    Stoer-Wagner算法基本思想:如果能求出图中某两个顶点之间的最小割,更新答案后合并这两个顶点继续求最小割,到最后就得到答案. 算法步骤: --------------------------- ...

  9. Thread对象的yield(),wait(),notify(),notifyall()

    Thread类中的主要方法: join()方法:让一个线程强制运行,线程强制运行期间,其他线程无法运行,必须等到此线程完成之后才可以继续执行. setDaemon():设置线程为后台线程,这样即使Ja ...

  10. AC日记——石头剪刀布 openjudge 1.6 08

    08:石头剪刀布 总时间限制:  1000ms 内存限制:  65536kB 描述 石头剪刀布是常见的猜拳游戏.石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负. 一天,小A和小B正好在 ...