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");
                }
            }
        }
  • 相关阅读:
    批量重命令文件名称的几种方式
    SecureCRT常用快捷键
    ipv4地址从最后一位按步长递增
    win32
    GDI根据位图和透明度创建蒙版
    git bash的一些使用
    win32
    win32
    win32
    QT
  • 原文地址:https://www.cnblogs.com/liaokui/p/11803808.html
Copyright © 2011-2022 走看看