官方api文档
https://api.mongodb.com/csharp/2.2/html/R_Project_CSharpDriverDocs.htm
https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-mongo-app?view=aspnetcore-3.1&tabs=visual-studio
安装mongoDB此次省略
可以搜索菜鸟教程观看
额外补充关于mongo的用户权限管理
添加用户时各个角色对应权限
1.数据库用户角色:read、readWrite;
2.数据库管理角色:dbAdmin、dbOwner、userAdmin;
3.集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4.备份恢复角色:backup、restore
5.所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6.超级用户角色:root
创建用户
> use admin
> db.createUser(
{
user: "admin",
pwd: "123456",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
db.auth("admin", "123456")
增加权限
db.grantRolesToUser("admin", [ { role: "read", db: "admin" } ])
db.grantRolesToUser("admin", [ { role: "readWrite", db: "admin" } ])
db.grantRolesToUser("admin", [ { role: "userAdminAnyDatabase", db: "testdb" } ])
show users
增加了权限才能写入数据
正题.net core下面的mongodb连接
配置文件
{
"ConnectionStrings": {
"ConnectionString": "mongodb://admin:123456@192.168.1.6:27017",
"DatabaseName": "testdb"
}
}引用包
<PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.2" />
<PackageReference Include="MongoDB.Driver" Version="2.10.2" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />CRUD 操作服务
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Extensions.Configuration;
using MongoDB.Bson;
using MongoDB.Driver;
namespace MongoDbTestConsoleApp
{
/// <summary>
/// 官方 https://api.mongodb.com/csharp/2.2/html/R_Project_CSharpDriverDocs.htm
/// https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-mongo-app?view=aspnetcore-3.1&tabs=visual-studio
/// </summary>
/// <typeparam name="T"></typeparam>
public class BaseRepository<T> where T : BaseModel
{
private readonly IMongoCollection<T> _collection; //数据表操作对象
private readonly IMongoDatabase _database;
public IMongoDatabase Database => _database;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="config"></param>
/// <param name="tableName">表名</param>
public BaseRepository(DatabaseSettings config, string tableName)
{
var client = new MongoClient(config.ConnectionString); //获取链接字符串
_database = client.GetDatabase(config.DatabaseName);
//var database = client.GetDatabase(config.GetSection("MongoDBSetting:DBName").Value); //数据库名 (不存在自动创建)
//获取对特定数据表集合中的数据的访问
_collection = _database.GetCollection<T>(tableName); // (不存在自动创建)
}
//Find<T> – 返回集合中与提供的搜索条件匹配的所有文档。
//InsertOne – 插入提供的对象作为集合中的新文档。
//ReplaceOne – 将与提供的搜索条件匹配的单个文档替换为提供的对象。
//DeleteOne – 删除与提供的搜索条件匹配的单个文档。
/// <summary>
/// 获取所有
/// </summary>
/// <returns></returns>
public List<T> Get()
{
return _collection.Find(T => true).ToList();
}
/// <summary>
/// 获取单个
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public T Get(string id)
{
return _collection.Find<T>(T => T.Id == id).FirstOrDefault();
}
/// <summary>
/// 创建
/// </summary>
/// <param name="T"></param>
/// <returns></returns>
public T Create(T T)
{
_collection.InsertOne(T);
return T;
}
/// <summary>
/// 更新
/// </summary>
/// <param name="id"></param>
/// <param name="TIn"></param>
public void Update(string id, T TIn)
{
_collection.ReplaceOne(T => T.Id == id, TIn);
}
/// <summary>
/// 删除
/// </summary>
/// <param name="TIn"></param>
public void Remove(T TIn)
{
_collection.DeleteOne(T => T.Id == TIn.Id);
}
/// <summary>
/// 根据id删除
/// </summary>
/// <param name="id"></param>
public void Remove(string id)
{
_collection.DeleteOne(T => T.Id == id);
}
}
}
配置文件模型
using System;
using System.Collections.Generic;
using System.Text;
namespace MongoDbTestConsoleApp
{
public class DatabaseSettings
{
public string ConnectionString { get; set; }
public string DatabaseName { get; set; }
}
}
基础实体模型
using System;
using System.Collections.Generic;
using System.Text;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
namespace MongoDbTestConsoleApp
{
public class BaseModel
{
[BsonId] //标记主键
[BsonRepresentation(BsonType.ObjectId)] //参数类型 , 无需赋值
public string Id { get; set; }
[BsonElement(nameof(AddTime))] //指明数据库中字段名为CreateDateTime
public DateTime AddTime { get; set; }
[BsonElement(nameof(IsDelete))]
public bool IsDelete { get; set; }
public BaseModel()
{
AddTime = DateTime.Now;
IsDelete = false;
}
}
}
测试对象模型
using System;
using System.Collections.Generic;
using System.Text;
namespace MongoDbTestConsoleApp
{
public class StudentModel:BaseModel
{
public string Name { get; set; }
public int Age { get; set; }
}
}关于mongodb BsonDocument序列化
直接tojson是数据类型是有包装的 例如ObjectId 得到的是 ObjectId("5e5e71be0036020790ea4058")
如果想将mongodb的ObjectId转换成正常的json格式可以尝试如下方式
{ "_id" : ObjectId("5e5e71be0036020790ea4058"), "Name" : "test"}转成成
{"_id":"5e58c528fbaf8aa66a11cfd9","name":"菜鸟教程"}或则
{ "_id" : { "$oid" : "5e58c528fbaf8aa66a11cfd9" }, "name" : "菜鸟教程" }main函数
using System;
using System.Collections.Generic;
using Microsoft.Extensions.Configuration;
using MongoDB.Bson;
using MongoDB.Bson.IO;
using MongoDB.Driver;
namespace MongoDbTestConsoleApp
{
class Program
{
static void Main(string[] args)
{
var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
var configuration = builder.Build();
var settings = configuration.GetSection("ConnectionStrings").Get<DatabaseSettings>();
var service=new BaseRepository<StudentModel>(settings, "Student");
var mycol = service.Database.GetCollection<BsonDocument>("mycol");
//var doc = new BsonDocument();
//doc.AddRange(new Dictionary<string, object>(){{ "name","哈哈哈hhh" }, { "age", "12" } });
//mycol.InsertOne(doc);
var testconl = mycol.Find(x => true).ToList();
JsonWriterSettings jsonWriterSettings = new JsonWriterSettings();
jsonWriterSettings.OutputMode = JsonOutputMode.Strict;
foreach (var item in testconl)
{
var bsonType = item.BsonType;
var dic = new Dictionary<string, object> { };
foreach (var ele in item.Elements)
{
if (ele.Value is BsonObjectId)
{
var vid =new BsonString(ele.Value.ToString());
//item.Remove(ele.Name);
//item.Add(new BsonElement(ele.Name, vid));
dic.Add(ele.Name, ele.Value.ToString());
}
else
{
dic.Add(ele.Name, ele.Value);
}
}
Console.WriteLine(item.ToJson());
Console.WriteLine(item.ToJson(jsonWriterSettings));
Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(dic));
}
var model = new StudentModel()
{
Age = 12,
Name = "test",
};
service.Create(model);
Console.WriteLine("Hello World!");
}
}
}