用c#操作Mongodb(附demo)
因为需要,写了一个基于泛型的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)的更多相关文章
- Koa 操作 Mongodb 数据库
node-mongodb-native的介绍 使用基于官方的 node-mongodb-native 驱动,封装一个更小.更快.更灵活的 DB 模块, 让我们用 nodejs 操作 Mongodb 数 ...
- Asp.net MVC集成Google Calendar API(附Demo源码)
Asp.net MVC集成Google Calendar API(附Demo源码) Google Calendar是非常方便的日程管理应用,很多人都非常熟悉.Google的应用在国内不稳定,但是在国外 ...
- java操作mongodb & springboot整合mongodb
简单的研究原生API操作MongoDB以及封装的工具类操作,最后也会研究整合spring之后作为dao层的完整的操作. 1.原生的API操作 pom.xml <!-- https://mvnre ...
- Python操作MongoDB和Redis
1. python对mongo的常见CURD的操作 1.1 mongo简介 mongodb是一个nosql数据库,无结构化.和去中心化. 那为什么要用mongo来存呢? 1. 首先.数据关系复杂,没有 ...
- C#开发微信公众平台-就这么简单(附Demo)转载
C#开发微信公众平台-就这么简单(附Demo) 来源:https://www.cnblogs.com/xishuai/p/3625859.html#!comments 写在前面 阅读目录: 服务号和 ...
- Android 浮动窗口进阶——画中画,浮动视频(附Demo)
今天继续上一篇Android顶层窗口.浮动窗口的进阶应用.上一篇主要讲解了WindowManager服务和如何使用WindowManager编写一个顶层窗口.今天主要是讲讲如何在顶层窗口里面播放视频, ...
- C# 操作 MongoDB
今项目使用Mongodb,C#操作MongoDB使用MongoDB.Driver.dll库(Nuget),写了个小Demo,如下: using System; using System.Collect ...
- PHP操作MongoDB数据库的示例
http://www.jquerycn.cn/a_8137 本节内容:PHP操作MongoDB数据库的简单示例. Mongodb的常用操作参看手册,php官方的http://us2.php.net/m ...
- FMDB的使用方法(附Demo)
http://www.jianshu.com/p/54e74ce87404 最近在项目中需要在多个页面对同样的数据进行相关操作,于是便用到了FMDB数据库操作,以下便是FMDB的一些简单的使用方法.附 ...
随机推荐
- Dubbo 分布式服务框架(spring、zookeeper)
DUBBO DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架, alibaba资源 源码:https://github.com ...
- MySQL 调优基础(二) Linux内存管理
进程的运行,必须使用内存.下图是Linux中进程中的内存的分布图: 其中最重要的 heap segment 和 stack segment.其它内存段基本是大小固定的.注意stack是向低地址增长的, ...
- 常用的js跳转页面方法实现汇总
1.window.location.href方式 <script language="javascript" type="text/javascript" ...
- 设置输入域(input/textarea)中文本光标的位置
以前记录了一篇 将光标定位于输入框最右侧的实现方式 ,实现光标定位在文本的最末.这种需求往往在修改现有的文本.有时可能还需要把光标定位在首位,或者中间某个位置,这就需要实现一个更通用的方法. 这个方法 ...
- URL tailing slash
Without tailing slash request header GET /snippets HTTP/1.1 User-Agent: Fiddler Host: 192.168.128.13 ...
- [转]新型智慧城市总体架构 华为 新ICT 一云二网三平台
本文转自:http://www.jpsycn.com/hangyexinwen/20160801142354.html “十三五”规划提出,充分运用现代信息技术和大数据,建设一批新型示范性智慧城市.日 ...
- Superpixel Based RGB-D Image Segmentation Using Markov Random Field——阅读笔记
1.基本信息 题目:使用马尔科夫场实现基于超像素的RGB-D图像分割: 作者所属:Ferdowsi University of Mashhad(Iron) 发表:2015 International ...
- Java Web之Servlet技术
1.Servlet基础 针对Servlet技术开发,Sun公司提供了一些列接口和类,其中最重要的是javax.servlet.Servlet接口,两个重要的包是javax.servlet和javax. ...
- Maven学习(七)仓库
* Maven仓库 在项目开发中, 项目目录下往往会有一个lib目录,用来存放第三方依赖jar文件, 如spring log4j jar等文件, Maven仓库就是放置JAR文件(WAR,ZIP,P ...
- flexslider.js和waypoints.js一起用时的巨坑
Flexslider has a callback API where you can execute functions after various actions:https://github.c ...