zoukankan      html  css  js  c++  java
  • C# 使用MongoDB(学习记录)

    1)下载MongoDB

    https://www.mongodb.com/download-center#community

    2)在D盘新建Data->db

    3)执行命令

    mongod --dbpath d:datadb

    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:datadbConfmongodb.log" --logappend --dbpath "d:datadb" --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

  • 相关阅读:
    sql server 去掉重复项
    mvc2.0与3.0 便利一行三个元素 便利多行代码
    新距离
    Android
    Java
    计算机文化基础期末考试复习
    立体的导航条
    腾讯微博
    1637
    私有变量
  • 原文地址:https://www.cnblogs.com/songjl/p/7543360.html
Copyright © 2011-2022 走看看