zoukankan      html  css  js  c++  java
  • 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");
                }
            }
        }
  • 相关阅读:
    用JS实现气泡效果
    如何判断浏览器JS代码
    你是怎么看完《JavaScript权威指南》《JavaScript高级程序设计》等这类厚书的?
    CSS3技巧:fit-content水平居中
    捋一捋JavaScript对象的理解
    js 判断数据类型的几种方法
    给想转行学习web前端的朋友提些学习建议及学习路线
    sentry 9.1.1docker版onepremise过程记录
    python内置函数all使用的坑
    centos7.2自带的php5.4升级为5.6
  • 原文地址:https://www.cnblogs.com/liaokui/p/11803808.html
Copyright © 2011-2022 走看看