• MongoDB 常用操作


    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using MongoDB.Bson;
    using MongoDB.Driver;
    
    namespace DSFinanceSystem
    {
        public class DSMongoDBConn
        {
            /// <summary>
            /// 数据库连接(无密码)
            /// </summary>
            public static string Conn { get; set; } = "mongodb://127.0.0.1:27017";
    
            /// <summary>
            /// 数据库名称
            /// </summary>
            public static string DataBaseName { get; set; } = "DSFinance";
    
            /// <summary>
            /// 集合名称
            /// </summary>
            public static string CollectionName { get; set; } = "Finance";
        }
    
        public class DSMongoDB
        {
            /// <summary>
            /// 初始化
            /// </summary>
            /// <param name="conn"></param>
            public static void InitMonogoDB()
            {
                Client = new MongoClient(DSMongoDBConn.Conn);
                DataBase = Client.GetDatabase(DSMongoDBConn.DataBaseName);
            }
    
            /// <summary>
            /// 定义接口
            /// </summary>
            public static IMongoDatabase DataBase { get; set; }
    
            /// <summary>
            /// 定义客户端
            /// </summary>
            public static IMongoClient Client { get; set; }
    
            /// <summary>
            /// 获取集合
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="name"></param>
            /// <returns></returns>
            public static IMongoCollection<T> GetCollection<T>()
            {
                IMongoCollection<T> collection = DataBase.GetCollection<T>(DSMongoDBConn.CollectionName);
                Filter = new BsonDocument();
                return collection;
            }
    
            public static BsonDocument Filter { get; set; } = new BsonDocument();
    
            public static async Task InsertOneAsync<T>(T t)
            {
                try
                {
                    var collection = GetCollection<T>();
                    await collection.InsertOneAsync(t);
                }
                catch (Exception e)
                {
                    throw;
                }
            }
    
            public static void InsertOne<T>(T t)
            {
                try
                {
                    var collection = GetCollection<T>();
                    collection.InsertOne(t);
                }
                catch (Exception e)
                {
                    throw;
                }
            }
    
            /// <summary>
            /// 删除第一行数据
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="key"></param>
            /// <param name="value"></param>
            public static void DeleteOne<T>(string key, object value)
            {
                try
                {
                    var collection = GetCollection<T>();
                    collection.DeleteOne(Builders<T>.Filter.Eq(key, value));
                }
                catch (Exception e)
                {
                    throw;
                }
            }
    
            public static async Task DeleteOneAsync<T>(string key, object value)
            {
                try
                {
                    var collection = GetCollection<T>();
                    await collection.DeleteOneAsync(Builders<T>.Filter.Eq(key, value));
                }
                catch (Exception e)
                {
                    throw;
                }
            }
    
            public static void DeleteMany<T>(string key, object value)
            {
                try
                {
                    var collection = GetCollection<T>();
                    collection.DeleteMany(Builders<T>.Filter.Eq(key, value));
                }
                catch (Exception e)
                {
                    throw;
                }
            }
    
            public static async Task DeleteManyAsync<T>(string key, object value)
            {
                try
                {
                    var collection = GetCollection<T>();
                    await collection.DeleteManyAsync(Builders<T>.Filter.Eq(key, value));
                }
                catch (Exception e)
                {
                    throw;
                }
            }
    
            public static void UpdateOne<T>(string key, object oldValue, object newValue)
            {
                try
                {
                    var collection = GetCollection<T>();
                    var filter = Builders<T>.Filter.Eq(key, oldValue);
                    var update = Builders<T>.Update.Set(key, newValue);
                    collection.UpdateOne(filter, update); //UpdateOne修改一条,UpdateMany修改全部
                }
                catch (Exception e)
                {
                    throw;
                }
            }
    
            public static void UpdateMany<T>(string key, object oldValue, object newValue)
            {
                try
                {
                    var collection = GetCollection<T>();
                    var filter = Builders<T>.Filter.Eq(key, oldValue);
                    var update = Builders<T>.Update.Set(key, newValue);
                    collection.UpdateMany(filter, update); //UpdateOne修改一条,UpdateMany修改全部
                }
                catch (Exception e)
                {
                    throw;
                }
            }
    
            public static async Task UpdateOneAsync<T>(string key, object oldValue, object newValue)
            {
                try
                {
                    var collection = GetCollection<T>();
                    var filter = Builders<T>.Filter.Eq(key, oldValue);
                    var update = Builders<T>.Update.Set(key, newValue);
                    await collection.UpdateOneAsync(filter, update); //UpdateOne修改一条,UpdateMany修改全部
                }
                catch (Exception e)
                {
                    throw;
                }
            }
    
            public static async Task UpdateManyAsync<T>(string key, object oldValue, object newValue)
            {
                try
                {
                    var collection = GetCollection<T>();
                    var filter = Builders<T>.Filter.Eq(key, oldValue);
                    var update = Builders<T>.Update.Set(key, newValue);
                    await collection.UpdateManyAsync(filter, update); //UpdateOne修改一条,UpdateMany修改全部
                }
                catch (Exception e)
                {
                    throw;
                }
            }
    
            public static List<T> Find<T>(string key, object value)
            {
                try
                {
                    var collection = GetCollection<T>();
                    var res = collection.Find(Builders<T>.Filter.Eq(key, value)).ToList();
                    return res;
                }
                catch (Exception e)
                {
                    throw;
                }
    
                return default;
            }
    
            public static List<T> Find<T>()
            {
                try
                {
                    var collection = GetCollection<T>();
                    var res = collection.Find(Filter).ToList();
                    return res;
                }
                catch (Exception e)
                {
                    throw;
                }
    
                return default;
            }
    
            /// <summary>
            /// 获取前count条数据
            /// </summary>
            /// <param name="key"></param>
            /// <param name="count"></param>
            /// <param name="asc">true=正序 , false=反序</param>
            /// <typeparam name="T"></typeparam>
            /// <returns></returns>
            public static List<T> Find<T>(string key,int count,bool asc)
            {
                try
                {
                    var list = Sort<T>(key,count,asc);
                    return list;
                }
                catch (Exception e)
                {
                    throw;
                }
    
                return default;
            }
    
            /// <summary>
            /// 排序
            /// </summary>
            /// <param name="key"></param>
            /// <param name="count"></param>
            /// <param name="asc"></param>
            /// <typeparam name="T"></typeparam>
            /// <returns></returns>
            private static List<T> Sort<T>(string key,int count, bool asc = true)
            {
                var coll = GetCollection<T>();
                FilterDefinitionBuilder<T> builderFilter = Builders<T>.Filter;
                //排序生成器
                SortDefinitionBuilder<T> builderSort = Builders<T>.Sort;
                //排序约束   Ascending 正序    Descending 倒序
                SortDefinition<T> sort = null;
    
                if (asc)
                {
                    sort = builderSort.Ascending(key);
                }
                else
                {
                    sort = builderSort.Descending(key);
                }
    
                try
                {
                    
                    var result = coll.Find<T>(Filter).Sort(sort).Limit(count).ToList();
                    return result;
                }
                catch (Exception)
                {
    
                    throw;
                }
                return default;
            }
        }
    }
    
    
  • 相关阅读:
    C# 获取数组最小下标或最大下标
    使用EPplus 打开Excel报错
    EPplus的读写
    SQL Server 无法生成 FRunCM 线程
    WinForm无法加载'SQLite.Interop.dll'的问题
    雪花算法-唯一ID生成器
    .NET使用AutoResetEvent实现多线程打印奇偶数
    docker安装Elasticsearch+Kibana+密码配置+Kibana中文设置
    语义化版本 2.0.0
    Chrome 上所有受限端口的列表
  • 原文地址:https://www.cnblogs.com/unitysir/p/14190886.html
Copyright © 2020-2023  润新知