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

 

posted @ 2017-09-18 15:38  宋米粒  阅读(480)  评论(0编辑  收藏  举报