• netcore 使用mongodb


    docker 安装mongodb:docker pull mongo
    运行容器

    docker run -d -p 27017:27017 --name mongo01 -v /docker/mongo/config:/data/configdb -v /docker/mongo/db:/data/db mongo

    进入容器.

    docker exec -it mongodb bash

     创建用户

    # 进入 admin 的数据库

    use admin

    # 创建管理员用户

    db.createUser(

    {

    user: "admin",

    pwd: "123456",

    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]

    }

    )

    # 创建有可读写权限的用户. 对于一个特定的数据库, 比如'demo'

    db.createUser({

    user: 'test',

    pwd: '123456',

    roles: [{role: "read", db: "demo"}]

    })

    新建项目Contact.Api 实现一个简易的联系人列表

    nuget引用包MongoDB.Driver

    添加配置文件

    "ConnectionStrings": {
    "ConnectionString": "mongodb://localhost:27017",
    "Database": "Finbook_Contacts",
    "LogCollection": "Finbook_Contacts_log"
    }

    添加数据库配置

        /// <summary>
        /// 数据库配置信息
        /// </summary>
        public class DBSettings
        {
            /// <summary>
            /// mongodb connectionstring
            /// </summary>
            public string ConnectionString { get; set; }
            /// <summary>
            /// mongodb database
            /// </summary>
            public string Database { get; set; }
            /// <summary>
            /// 日志collection
            /// </summary>
            public string LogCollection { get; set; }
        }

    添加db上下文

      public class ContactContext
        {
            private IMongoDatabase _dataBase;
            private readonly string _logCollection;
            public ContactContext(IOptions<DBSettings> settings)
            {
                var client = new MongoClient(settings.Value.ConnectionString);
                if (client != null)
                    _dataBase = client.GetDatabase(settings.Value.Database);
                _logCollection = settings.Value.LogCollection;
            }
    
    
            private void CheckAddCreateCollection(string collectionName)
            {
                var collectionList = _dataBase.ListCollections().ToList();
                var collectionNames = new List<string>();
                //获得所有集合的名称
                collectionList.ForEach(x => { collectionNames.Add(x["name"].AsString); });
                //如果没有这个集合就创建一个 (相当于创建一个表)
                if (!collectionNames.Contains(collectionName))
                {
                    _dataBase.CreateCollection(collectionName);
                }
            }
    
            public IMongoCollection<LogEventData> LogEventDatas
            {
                get
                {
                    CheckAddCreateCollection(_logCollection);
                    return _dataBase.GetCollection<LogEventData>(_logCollection);
                }
            }
            public IMongoCollection<ContactBook> ContactBooks
            {
                get
                {
                    CheckAddCreateCollection("ContactBooks");
                    return _dataBase.GetCollection<ContactBook>("ContactBooks");
                }
            }
            public IMongoCollection<T> GetCollection<T>(string name) where T : class
            {
                CheckAddCreateCollection(name);
                return _dataBase.GetCollection<T>(name);  
            }
            public IMongoCollection<ContactApplyRequest>ContactApplyRequests
            {
                get
                {
                    CheckAddCreateCollection("ContactApplyRequests");
                    return _dataBase.GetCollection<ContactApplyRequest>("ContactApplyRequests");
                }
            }
        }
  • 相关阅读:
    persistence_timeout ,域名请求登录后一操作即被踢出,,KeepAlive,lvs
    记录因xen而导致lvs,realserver转发activeconn为0
    html5各种页面切换效果和模态对话框
    [设计模式] javascript 之 抽象工厂模式
    jQuery源码分析-构造函数详解
    CSS3动画的回调处理
    jQuery load()方法用法集锦!
    css控制input标签
    分享22款响应式的 jQuery 图片滑块插件
    Jquery取得iframe中元素的几种方法(转载)
  • 原文地址:https://www.cnblogs.com/liaokui/p/11803808.html
Copyright © 2020-2023  润新知