这里使用的是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 的数据库名及表名也不区分大小写。