第一次使用MongoDB 插入记录遇到的问题

81 篇文章 2 订阅
4 篇文章 0 订阅

这里使用的是MongoDB .NET Driver,在github中名字是mongo-csharp-driver ,如何安装到项目里这里就不说了。

首先创建公用连接及获取集合的方法:

public static class DBHelper
    {
       
        //创建全局唯一连接
        private static MongoClient Client = new MongoClient("mongodb://localhost:27017");
        //Get a database CMS ,如果cms 数据库不存在,会自动创建
        public static IMongoDatabase Database = Client.GetDatabase("CMS");

        /// <summary>
        /// get Untyped Documents collection
        /// </summary>
        /// <param name="table"></param>
        /// <returns></returns>
        public static IMongoCollection<BsonDocument> GetCollection(string table)
        {
            return Database.GetCollection<BsonDocument>(table);
        }

    }

然后在登录成功的时候增加插入MongoDB的语句,这个实际就是实现登录成功的时候添加一个操作员的操作日志记录。这里数据库创建为CMS,集合创建为AdminLog ,如果在关系型数据库中,相当于表名。插入语句如下:

 var collection = DBHelper.GetCollection("AdminLog");
                        var document = new BsonDocument {
                            {"UserName",user.UserName },
                            {"LoginIp",RequestHelper.GetIP() },
                            {"Operation",new BsonDocument{{ "操作类型","登录" },{"操作员",user.RealName} } },
                            {"CreateTime",DateTime.Now }
                        };
                        await collection.InsertOneAsync(document);

执行后没有报任何错误。在mongodb 的data 目录下,CMS创建成功,然后CMS下出现了两个文件,一个是collection开头的wt文件,一个是index开头的wt文件。似乎执行成功了。然后我打开powershell 窗口,打算看看是否有相关记录。

首先运行mongo 命令,进入MongoDB 操作界面。执行

use cms 

切换到cms 数据库,如果不用 use命令,默认打开的是test 数据库。然后执行:

db.adminlog.find()  命令,这个命令是列出adminlog 集合中的所有记录。执行后窗口中未出现任何记录。怕是由于大小写的问题。因为我的管理日志表是AdminLog,首字母大写,于是又执行:

db.AdminLog.find()  ,仍然没有任何显示。难道没执行成功?于是我在登录页面插入语句下面增加一条语句,并用日志输出:

var count = collection.Count(new BsonDocument());
EventLog.WriteLog("mongodb count:" + count);

这次在日志中查到count 值是6,因为我连续执行了多次登录操作。这说明adminlog 中有六条记录。为什么在powershell 窗口没显示出来。于是我在powershell 窗口又执行:

show dbs 命令,输出的结果是:


看到了,是CMS,但是是大写。难道是这里的问题?于是重新输入:

use CMS

然后又输入:

db.AdminLog.find()

这次成功的显示了插入的记录:


看来在mongodb 的cmd 操作界面,无论是数据库名,还是集合名,都是区分大小写的,而且,即使你输错,它也没任何提示。这点和sqlserver 不同啊。若是 sqlserver 最起码会提示个不存在吧。而且sqlserve 的数据库名及表名也不区分大小写。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值