C# 使用MongoDB(学习记录)
1)下载MongoDB
https://www.mongodb.com/download-center#community
2)在D盘新建Data->db
3)执行命令
mongod --dbpath d:\data\db
4)查看是否有文件写入
5)下载工具 Robomongo
http://www.softpedia.com/get/Internet/Servers/Database-Utils/Robomongo.shtml
6)生成服务
mongod.exe --bind_ip 127.0.0.1 --logpath "d:\data\dbConf\mongodb.log" --logappend --dbpath "d:\data\db" --port 27017 --serviceName "myFirst" --serviceDisplayName "myFirst" --install
7)常用命令
>show collections //显示当前数据库下的所有集合
>db.runoob.insert({"name":"菜鸟教程","taxcode":"123456"}) //添加数据
> db.runoob.update({'name':'菜鸟教程'},{'$set':{'taxcode':'test'}},upsert=true,multi=false) //name为菜鸟教程 更新记录taxcode为test
>db.runoob.find() //查询数据
>db.runoob.remove() //删除所有数据
> db.runoob.remove({'name':'菜鸟教程'}) //删除记录name为菜鸟教程
8)VS新建项目
9)NuGet引用 mongodb.driver 及 bson bson先装
10)执行代码
1)新建通用类
/// <summary>
/// 标准 新建类需继承
/// </summary>
public abstract class BaseEntity
{
public ObjectId Id { get; set; } public string State { get; set; } public string CreateTime { get; set; } public string UpdateTime { get; set; }
}
2)新建要存储的数据结构类 需要继承标准类
public class Public:BaseEntity
{
public string colname { get; set; }
public string content { get; set; }
}
3)书写帮助类 网上收集
using MongoDB.Bson;
using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Web; /// <summary>
/// 网上收集
/// </summary>
namespace MongodbDemo.Models
{
public class DB
{
//连接数据库
private static readonly string connStr = "mongodb://127.0.0.1:27017";//获取配置信息 private static readonly string dbName = "Demo";//获取配置信息 private static IMongoDatabase db = null; private static readonly object lockHelper = new object();
//构造函数
public static IMongoDatabase GetDb()
{
if (db == null)
{
lock (lockHelper)
{
if (db == null)
{
var client = new MongoClient(connStr);
db = client.GetDatabase(dbName);
}
}
}
return db;
} }
/// <summary>
/// 使用
/// </summary>
/// <typeparam name="T"></typeparam>
public class MongodbHelpers<T> where T : BaseEntity
{ private IMongoDatabase db = null; private IMongoCollection<T> collection = null; public MongodbHelpers()
{
this.db = DB.GetDb();
collection = db.GetCollection<T>(typeof(T).Name);
}
/// <summary>
/// 新增
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public T Insert(T entity)
{
var flag = ObjectId.GenerateNewId();
entity.GetType().GetProperty("Id").SetValue(entity, flag);//获取参数类型 给id属性设置值 entity.State = "y";
entity.CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
entity.UpdateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); collection.InsertOneAsync(entity);
collection.InsertOneAsync(entity);//异步插入一个
return entity;
} /// <summary>
/// 修改
/// </summary>
/// <param name="id">编号</param>
/// <param name="field">属性</param>
/// <param name="value">值</param>
public void Modify(string id, string field, string value)
{
var filter = Builders<T>.Filter.Eq("Id", ObjectId.Parse(id));
var updated = Builders<T>.Update.Set(field, value);
UpdateResult result = collection.UpdateOneAsync(filter, updated).Result;
}
/// <summary>
/// 更新
/// </summary>
/// <param name="entity"></param>
public void Update(T entity)
{
try
{
var old = collection.Find(e => e.Id.Equals(entity.Id)).ToList().FirstOrDefault(); foreach (var prop in entity.GetType().GetProperties())
{
var newValue = prop.GetValue(entity);
var oldValue = old.GetType().GetProperty(prop.Name).GetValue(old);
if (newValue != null)
{
if (oldValue == null)
oldValue = "";
if (!newValue.ToString().Equals(oldValue.ToString()))
{
old.GetType().GetProperty(prop.Name).SetValue(old, newValue.ToString());
}
}
}
old.State = "n";
old.UpdateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); var filter = Builders<T>.Filter.Eq("Id", entity.Id);
ReplaceOneResult result = collection.ReplaceOneAsync(filter, old).Result;
}
catch (Exception ex)
{
var aaa = ex.Message + ex.StackTrace;
throw;
}
}
/// <summary>
/// 删除
/// </summary>
/// <param name="entity"></param>
public void Delete(T entity)
{
var filter = Builders<T>.Filter.Eq("Id", entity.Id);
collection.DeleteOneAsync(filter);
} /// <summary>
/// 根据id查询一条数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public T QueryOne(string id)
{
return collection.Find(a => a.Id == ObjectId.Parse(id)).ToList().FirstOrDefault();
} /// <summary>
/// 查询所有数据
/// </summary>
/// <returns></returns>
public List<T> QueryAll()
{
return collection.Find(a => a.State != "").ToList();
}
/// <summary>
/// 根据条件查询一条数据
/// </summary>
/// <param name="express"></param>
/// <returns></returns>
public T QueryByFirst(Expression<Func<T, bool>> express)
{
return collection.Find(express).ToList().FirstOrDefault();
}
/// <summary>
/// 批量添加
/// </summary>
/// <param name="list"></param>
public void InsertBatch(List<T> list)
{
collection.InsertManyAsync(list);
}
/// <summary>
/// 根据Id批量删除
/// </summary>
public void DeleteBatch(List<ObjectId> list)
{
var filter = Builders<T>.Filter.In("Id", list);
collection.DeleteManyAsync(filter);
} /// <summary>
/// 未添加到索引的数据
/// </summary>
/// <returns></returns>
public List<T> QueryToLucene()
{
return collection.Find(a => a.State.Equals("y") || a.State.Equals("n")).ToList();
} }
}
4)简单调用
Public class1 = new Public();
MongodbHelpers<Public> mon = new MongodbHelpers<Public>();
class1.colname = "名称";
class1.content = "内容";
var result = mon.Insert(class1);
11)git地址
http://git.oschina.net/songjingli/MongodbDemo
C# 使用MongoDB(学习记录)的更多相关文章
- MongoDB学习记录
一.操作符 "$lt" :"<""$lte" :"<=""$gt" :"> ...
- mongoDB学习记录---PHP扩展的find返回值
最近的一个项目中用到了MongoDB,主要是使用MongoDB的PHP扩展.MongoDB的扩展中用于一个用于查询的方法是find().下面针对在理解MongoDB扩展的find()方法中做的实验做个 ...
- MongoDB 学习记录(二)yum安装
前言:接着上篇继续学习MongoDB,这次学习的是在Linux下安装MongoDB 环境:centos7.3 安装版本:MongoDB4.0 官网安装教程地址 https://docs.mongodb ...
- MongoDB学习记录(四) - MongoDB的"增查改删"操作之"改"
更新文档主要有以下几种方法: db.collection.updateOne(filter, update, options) db.collection.updateMany(filter, upd ...
- MongoDB学习记录(二) - MongoDB的"增查改删"操作之"增"
如果做插入文档操作的集合不存在,那么集合将被创建 db.collection.insertOne() insertOne为collection插入一条文档,如果文档的_id字段未指定,MongoDB会 ...
- MongoDB 学习记录(一)
前言:之前一直只是简单了解MongoDB,而且是随便看看的那种,今天决定好好的整理一下,以便自己能 温故而知新 1.MongoDB是什么 MongoDB 是一个高性能,开源,无模式的文档型数据库,开 ...
- MongoDB学习记录(一) - 安装、启动与建立数据库
简要说明一个基本概念:MongoDB中的三要素:数据库(database).集合(collection)和文档(document). 文档:类似于JSON对象,由字段(field)和值(value)组 ...
- MongoDB学习记录(三) - MongoDB的"增查改删"操作之"查"
查找使用的方法: db.collection.find() 查找所有文档 db.collection.find({})或者db.collection.find({}) 指定键值对 db.collect ...
- MongoDB学习笔记—Linux下搭建MongoDB环境
1.MongoDB简单说明 a MongoDB是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应用提供可扩展的高性能数据存储解决方案. b MongoDB是一个介于关系 ...
- Mongodb学习笔记一(Mongodb环境配置)
Mongodb学习 说明: MongoDB由databases组成,database由collections组成,collection由documents组成,document由fileds组成.Mo ...
随机推荐
- BZOJ_3172_[Tjoi2013]单词_后缀自动机
BZOJ_3172_[Tjoi2013]单词_后缀自动机 Description 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. ...
- 优化Laravel的分页LIMIT和OFFSET调用
在分页系统中使用limit和offset是很常见的,它们通常也会和ORDER BY一起使用.索引对排序较有帮助,如果没有索引就需要大量的文件排序. 一个常见的问题是偏移量很大,比如查询使用了LIMIT ...
- mysqlnd cannot connect to MySQL 4.1+ using old authentication
报这个错误主要是因为mysql使用了老的密码格式,而程序要求使用新的格式导致的,解决办法: SET old_passwords = 0; UPDATE mysql.user SET Password ...
- 【黑金教程笔记之006】【建模篇】【Lab 05 SOS信号之一】—笔记
sos_module.v是产生SOS信号的功能模块.即有次序的输出莫斯码:点.画.间隔.control_module.v是一个定时触发器,每一段时间使能sos_module.v. 模块: /***** ...
- 【WIP】Ruby JSON
创建: 2018/03/22 以后有空补上 注: JSON.generate 参数只能是Obejct或者Array, 不可以是Hash https://docs.ruby-lang.org/ja/la ...
- codeforces 28D(dp)
D. Don't fear, DravDe is kind time limit per test 2 seconds memory limit per test 256 megabytes inpu ...
- Luogu P2858 [USACO06FEB]奶牛零食Treats for the Cows 【区间dp】By cellur925
题目传送门 做完A Game以后找道区间dp练练手...结果这题没写出来(哭). 和A Game一样的性质,从两边取,但是竟然还有天数,鉴于之前做dp经常在状态中少保存一些东西,所以这次精心设计了状态 ...
- POJ2486 Apple Tree 【树上背包】
一句话题意:一棵树,一共n个点,每个点上有一个权值,求从1出发,走k步,最多能遍历到的权值.可以往回走. 第一(二)道树上背包题,先是看了dalao的题解,改了一点就过样例了.然而....TLE??? ...
- 【react-native】持续踩坑总结
陆陆续续的已经接触了RN快3个月,整体的感受...感觉在调试兼容andorid问题的时候就像回到了IE时代. 本来想按自己踩坑的路径持续更新一些记录,但是,现实是坑太多,还是统一写一篇汇总一下吧(鉴于 ...
- Tian Ji -- The Horse Racing HDU - 1052
Tian Ji -- The Horse Racing HDU - 1052 (有平局的田忌赛马,田忌赢一次得200块,输一次输掉200块,平局不得钱不输钱,要使得田忌得到最多(如果只能输就输的最少) ...