业精于勤,荒于嬉;行成于思,毁于随。

我们可以结合相关的IDE做一个简单的增删改查了,实现MongoDB在项目中的初步应用。

前提是安装了MongoDB服务和MongoDB可视化工具,没有安装的可以点下面的路径去操作一下。

第一步:NoSql非关系型数据库之MongoDB应用(一):安装MongoDB服务

第二步:NoSql非关系型数据库之MongoDB应用(二):安装MongoDB可视化工具

注:文档末尾附源码


1、创建项目

演示操作环境(其他环境也可以):

开发环境:Windows 10 专业版

系统类型:64 位操作系统, 基于 x64 的处理器

IDE:Visual Studio 2019 Community

数据库:MongoDB


创建一个项目名为MongoDBTest的Web API,net或者net core都可以,我这里以net core为例


2、在NuGet引用MongoDB动态链接库

需要在项目中引用 MongoDB.Bson 和 MongoDB.Driver   注意是2.10.4版本的。

MongoDB.Bson是什么

BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。

BSON可以做为网络数据交换的一种存储形式,这个有点类似于Google的Protocol Buffer,但是BSON是一种schema-less的存储形式,它的优点是灵活性高,但它的缺点是空间利用率不是很理想,

BSON有三个特点:轻量性、可遍历性、高效性

{“hello":"world"} 这是一个BSON的例子,其中"hello"是key name,它一般是cstring类型,字节表示是cstring::= (byte*) "/x00" ,其中*表示零个或多个byte字节,/x00表示结束符;后面的"world"是value值,它的类型一般是string,double,array,binarydata等类型。

MongoDB.Bson在MongoDB中的使用

  MongoDB使用了BSON这种结构来存储数据和网络数据交换。把这种格式转化成一文档这个概念(Document),因为BSON是schema-free的,

所以在MongoDB中所对应的文档也有这个特征,这里的一个Document也可以理解成关系数据库中的一条记录(Record),只是这里的Document的变化更丰富一些,如Document可以嵌套。

  MongoDB以BSON做为其存储结构的一种重要原因是其可遍历性。

MongoDB.Driver是什么

顾名思义,MongoDB.Driver是官网推出的连接MongoDB的驱动包,我们连接MongoDB需要依赖这个链接库。


2、创建MongoDB上下文连接工具类

引入 MongoDB.Bson 和 MongoDB.Driver包后就可以编写帮助类了,帮助类太多,帮助类可以自己拓展需要的方法,不过这里拓展的方法已经足够使用了。

创建一个上下文文件夹DbContexts,创建DBFactory帮助类,添加Bson和Driver的using引用,内容如下(文档末尾附源码里面有):

using MongoDB.Bson;
using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; namespace MongoDBTest.DbContexts
{
/// <summary>
/// Date 2021-07-12
/// Author:xiongze
/// Describe:MongoDB工具类
/// </summary>
/// <typeparam name="T"></typeparam>
public static class MongodbClient<T> where T : class
{
#region +MongodbInfoClient 获取mongodb实例
/// <summary>
/// 获取mongodb实例
/// </summary>
/// <param name="host">连接字符串,库,表</param>
/// <returns></returns>
public static IMongoCollection<T> MongodbInfoClient(MongodbHost host)
{
var mongoSettings = MongoClientSettings.FromConnectionString(host.Connection);
mongoSettings.GuidRepresentation = GuidRepresentation.PythonLegacy;
MongoClient client = new MongoClient(mongoSettings);
var dataBase = client.GetDatabase(host.DataBase);
return dataBase.GetCollection<T>(host.Table);
}
#endregion
} public class MongodbHost
{
//public MongodbHost()
//{
// //Connection = CommonConfig.GetConnectionStrings().ConnectionStrings.MongoDBConnection;
// Connection =""; //这里是获取配置连接的mongodb连接,我这里先不指定,各种指定写法不一样(net和netcore获取不一样)
// DataBase = new MongoUrl(Connection).DatabaseName;
//}
public MongodbHost(string connectionString)
{
Connection = connectionString;
DataBase = new MongoUrl(connectionString).DatabaseName;
}
/// <summary>
/// 连接字符串
/// </summary>
public string Connection { get; set; }
/// <summary>
/// 库
/// </summary>
public string DataBase { get; set; }
/// <summary>
/// 表
/// </summary>
public string Table { get; set; } } public static class TMongodbHelper<T> where T : class, new()
{
#region +Add 添加一条数据
/// <summary>
/// 添加一条数据
/// </summary>
/// <param name="t">添加的实体</param>
/// <param name="host">mongodb连接信息</param>
/// <returns></returns>
public static int Add(MongodbHost host, T t)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
client.InsertOne(t);
return 1;
}
catch
{
return 0;
}
}
#endregion #region +AddAsync 异步添加一条数据
/// <summary>
/// 异步添加一条数据
/// </summary>
/// <param name="t">添加的实体</param>
/// <param name="host">mongodb连接信息</param>
/// <returns></returns>
public static async Task<int> AddAsync(MongodbHost host, T t)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
await client.InsertOneAsync(t);
return 1;
}
catch
{
return 0;
}
}
#endregion #region +InsertMany 批量插入
/// <summary>
/// 批量插入
/// </summary>
/// <param name="host">mongodb连接信息</param>
/// <param name="t">实体集合</param>
/// <returns></returns>
public static int InsertMany(MongodbHost host, List<T> t)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
client.InsertMany(t);
return 1;
}
catch (Exception)
{
//throw ex;
return 0;
}
}
#endregion #region +InsertManyAsync 异步批量插入
/// <summary>
/// 异步批量插入
/// </summary>
/// <param name="host">mongodb连接信息</param>
/// <param name="t">实体集合</param>
/// <returns></returns>
public static async Task<int> InsertManyAsync(MongodbHost host, List<T> t)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
await client.InsertManyAsync(t);
return 1;
}
catch (Exception)
{
return 0;
}
} public static async Task<int> AsyncInsertManyMethod(MongodbHost mongodb, T log)
{
int i = await TMongodbHelper<T>.InsertManyAsync(mongodb, new List<T> { log });
return i;
}
#endregion #region +Update 修改一条数据
/// <summary>
/// 修改一条数据
/// </summary>
/// <param name="t">添加的实体</param>
/// <param name="host">mongodb连接信息</param>
/// <returns></returns>
public static UpdateResult Update(MongodbHost host, T t, string id)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
//修改条件
FilterDefinition<T> filter = Builders<T>.Filter.Eq("_id", new ObjectId(id));
//要修改的字段
var list = new List<UpdateDefinition<T>>();
foreach (var item in t.GetType().GetProperties())
{
if (item.Name.ToLower() == "id") continue;
list.Add(Builders<T>.Update.Set(item.Name, item.GetValue(t)));
}
var updatefilter = Builders<T>.Update.Combine(list);
return client.UpdateOne(filter, updatefilter);
}
catch (Exception ex)
{
throw ex;
}
}
#endregion #region +UpdateAsync 异步修改一条数据
/// <summary>
/// 异步修改一条数据
/// </summary>
/// <param name="t">添加的实体</param>
/// <param name="host">mongodb连接信息</param>
/// <returns></returns>
public static async Task<UpdateResult> UpdateAsync(MongodbHost host, T t, string id)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
//修改条件
FilterDefinition<T> filter = Builders<T>.Filter.Eq("_id", new ObjectId(id));
//要修改的字段
var list = new List<UpdateDefinition<T>>();
foreach (var item in t.GetType().GetProperties())
{
if (item.Name.ToLower() == "id") continue;
list.Add(Builders<T>.Update.Set(item.Name, item.GetValue(t)));
}
var updatefilter = Builders<T>.Update.Combine(list);
return await client.UpdateOneAsync(filter, updatefilter);
}
catch (Exception ex)
{
throw ex;
}
}
#endregion #region +UpdateManay 批量修改数据
/// <summary>
/// 批量修改数据
/// </summary>
/// <param name="dic">要修改的字段</param>
/// <param name="host">mongodb连接信息</param>
/// <param name="filter">修改条件</param>
/// <returns></returns>
public static UpdateResult UpdateManay(MongodbHost host, Dictionary<string, string> dic, FilterDefinition<T> filter)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
T t = new T();
//要修改的字段
var list = new List<UpdateDefinition<T>>();
foreach (var item in t.GetType().GetProperties())
{
if (!dic.ContainsKey(item.Name)) continue;
var value = dic[item.Name];
list.Add(Builders<T>.Update.Set(item.Name, value));
}
var updatefilter = Builders<T>.Update.Combine(list);
return client.UpdateMany(filter, updatefilter);
}
catch (Exception ex)
{
throw ex;
}
}
#endregion #region +UpdateManayAsync 异步批量修改数据
/// <summary>
/// 异步批量修改数据
/// </summary>
/// <param name="dic">要修改的字段</param>
/// <param name="host">mongodb连接信息</param>
/// <param name="filter">修改条件</param>
/// <returns></returns>
public static async Task<UpdateResult> UpdateManayAsync(MongodbHost host, Dictionary<string, string> dic, FilterDefinition<T> filter)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
T t = new T();
//要修改的字段
var list = new List<UpdateDefinition<T>>();
foreach (var item in t.GetType().GetProperties())
{
if (!dic.ContainsKey(item.Name)) continue;
var value = dic[item.Name];
list.Add(Builders<T>.Update.Set(item.Name, value));
}
var updatefilter = Builders<T>.Update.Combine(list);
return await client.UpdateManyAsync(filter, updatefilter);
}
catch (Exception ex)
{
throw ex;
}
}
#endregion #region Delete 删除一条数据
/// <summary>
/// 删除一条数据
/// </summary>
/// <param name="host">mongodb连接信息</param>
/// <param name="id">objectId</param>
/// <returns></returns>
public static DeleteResult Delete(MongodbHost host, string id)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
FilterDefinition<T> filter = Builders<T>.Filter.Eq("_id", new ObjectId(id));
return client.DeleteOne(filter);
}
catch (Exception ex)
{
throw ex;
} }
#endregion #region DeleteAsync 异步删除一条数据
/// <summary>
/// 异步删除一条数据
/// </summary>
/// <param name="host">mongodb连接信息</param>
/// <param name="id">objectId</param>
/// <returns></returns>
public static async Task<DeleteResult> DeleteAsync(MongodbHost host, string id)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
//修改条件
FilterDefinition<T> filter = Builders<T>.Filter.Eq("_id", new ObjectId(id));
return await client.DeleteOneAsync(filter);
}
catch (Exception ex)
{
throw ex;
} }
#endregion #region DeleteMany 删除多条数据
/// <summary>
/// 删除一条数据
/// </summary>
/// <param name="host">mongodb连接信息</param>
/// <param name="filter">删除的条件</param>
/// <returns></returns>
public static DeleteResult DeleteMany(MongodbHost host, FilterDefinition<T> filter)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
return client.DeleteMany(filter);
}
catch (Exception ex)
{
throw ex;
} }
#endregion #region DeleteManyAsync 异步删除多条数据
/// <summary>
/// 异步删除多条数据
/// </summary>
/// <param name="host">mongodb连接信息</param>
/// <param name="filter">删除的条件</param>
/// <returns></returns>
public static async Task<DeleteResult> DeleteManyAsync(MongodbHost host, FilterDefinition<T> filter)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
return await client.DeleteManyAsync(filter);
}
catch (Exception ex)
{
throw ex;
} }
#endregion #region Count 根据条件获取总数
/// <summary>
/// 根据条件获取总数
/// </summary>
/// <param name="host">mongodb连接信息</param>
/// <param name="filter">条件</param>
/// <returns></returns>
public static long Count(MongodbHost host, FilterDefinition<T> filter)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
return client.CountDocuments(filter);
}
catch (Exception ex)
{
throw ex;
}
}
#endregion #region CountAsync 异步根据条件获取总数
/// <summary>
/// 异步根据条件获取总数
/// </summary>
/// <param name="host">mongodb连接信息</param>
/// <param name="filter">条件</param>
/// <returns></returns>
public static async Task<long> CountAsync(MongodbHost host, FilterDefinition<T> filter)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
return await client.CountDocumentsAsync(filter);
}
catch (Exception ex)
{
throw ex;
}
}
#endregion #region FindOne 根据id查询一条数据
/// <summary>
/// 根据id查询一条数据
/// </summary>
/// <param name="host">mongodb连接信息</param>
/// <param name="id">objectid</param>
/// <param name="field">要查询的字段,不写时查询全部</param>
/// <returns></returns>
public static T FindOne(MongodbHost host, string id, string[] field = null)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
FilterDefinition<T> filter = Builders<T>.Filter.Eq("_id", new ObjectId(id));
//不指定查询字段
if (field == null || field.Length == 0)
{
return client.Find(filter).FirstOrDefault<T>();
} //制定查询字段
var fieldList = new List<ProjectionDefinition<T>>();
for (int i = 0; i < field.Length; i++)
{
fieldList.Add(Builders<T>.Projection.Include(field[i].ToString()));
}
var projection = Builders<T>.Projection.Combine(fieldList);
fieldList?.Clear();
return client.Find(filter).Project<T>(projection).FirstOrDefault<T>();
}
catch (Exception ex)
{
throw ex;
}
}
#endregion #region FindOneAsync 异步根据id查询一条数据
/// <summary>
/// 异步根据id查询一条数据
/// </summary>
/// <param name="host">mongodb连接信息</param>
/// <param name="id">objectid</param>
/// <returns></returns>
public static async Task<T> FindOneAsync(MongodbHost host, string id, string[] field = null)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
FilterDefinition<T> filter = Builders<T>.Filter.Eq("_id", new ObjectId(id));
//不指定查询字段
if (field == null || field.Length == 0)
{
return await client.Find(filter).FirstOrDefaultAsync();
} //制定查询字段
var fieldList = new List<ProjectionDefinition<T>>();
for (int i = 0; i < field.Length; i++)
{
fieldList.Add(Builders<T>.Projection.Include(field[i].ToString()));
}
var projection = Builders<T>.Projection.Combine(fieldList);
fieldList?.Clear();
return await client.Find(filter).Project<T>(projection).FirstOrDefaultAsync();
}
catch (Exception ex)
{
throw ex;
}
}
#endregion #region FindList 查询集合
/// <summary>
/// 查询集合
/// </summary>
/// <param name="host">mongodb连接信息</param>
/// <param name="filter">查询条件</param>
/// <param name="field">要查询的字段,不写时查询全部</param>
/// <param name="sort">要排序的字段</param>
/// <returns></returns>
public static List<T> FindList(MongodbHost host, FilterDefinition<T> filter, string[] field = null, SortDefinition<T> sort = null)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
//不指定查询字段
if (field == null || field.Length == 0)
{
if (sort == null) return client.Find(filter).ToList();
//进行排序
return client.Find(filter).Sort(sort).ToList();
} //制定查询字段
var fieldList = new List<ProjectionDefinition<T>>();
for (int i = 0; i < field.Length; i++)
{
fieldList.Add(Builders<T>.Projection.Include(field[i].ToString()));
}
var projection = Builders<T>.Projection.Combine(fieldList);
fieldList?.Clear();
if (sort == null) return client.Find(filter).Project<T>(projection).ToList();
//排序查询
return client.Find(filter).Sort(sort).Project<T>(projection).ToList();
}
catch (Exception ex)
{
throw ex;
}
}
#endregion #region FindListAsync 异步查询集合
/// <summary>
/// 异步查询集合
/// </summary>
/// <param name="host">mongodb连接信息</param>
/// <param name="filter">查询条件</param>
/// <param name="field">要查询的字段,不写时查询全部</param>
/// <param name="sort">要排序的字段</param>
/// <returns></returns>
public static async Task<List<T>> FindListAsync(MongodbHost host, FilterDefinition<T> filter, string[] field = null, SortDefinition<T> sort = null)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
//不指定查询字段
if (field == null || field.Length == 0)
{
if (sort == null) return await client.Find(filter).ToListAsync();
return await client.Find(filter).Sort(sort).ToListAsync();
} //制定查询字段
var fieldList = new List<ProjectionDefinition<T>>();
for (int i = 0; i < field.Length; i++)
{
fieldList.Add(Builders<T>.Projection.Include(field[i].ToString()));
}
var projection = Builders<T>.Projection.Combine(fieldList);
fieldList?.Clear();
if (sort == null) return await client.Find(filter).Project<T>(projection).ToListAsync();
//排序查询
return await client.Find(filter).Sort(sort).Project<T>(projection).ToListAsync();
}
catch (Exception ex)
{
throw ex;
}
}
#endregion #region FindListByPage 分页查询集合
/// <summary>
/// 分页查询集合
/// </summary>
/// <param name="host">mongodb连接信息</param>
/// <param name="filter">查询条件</param>
/// <param name="pageIndex">当前页</param>
/// <param name="pageSize">页容量</param>
/// <param name="count">总条数</param>
/// <param name="field">要查询的字段,不写时查询全部</param>
/// <param name="sort">要排序的字段</param>
/// <returns></returns>
public static List<T> FindListByPage(MongodbHost host, FilterDefinition<T> filter, int pageIndex, int pageSize, out long count, string[] field = null, SortDefinition<T> sort = null)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
count = client.CountDocuments(filter);
//不指定查询字段
if (field == null || field.Length == 0)
{
if (sort == null) return client.Find(filter).Skip((pageIndex - 1) * pageSize).Limit(pageSize).ToList();
//进行排序
return client.Find(filter).Sort(sort).Skip((pageIndex - 1) * pageSize).Limit(pageSize).ToList();
} //制定查询字段
var fieldList = new List<ProjectionDefinition<T>>();
for (int i = 0; i < field.Length; i++)
{
fieldList.Add(Builders<T>.Projection.Include(field[i].ToString()));
}
var projection = Builders<T>.Projection.Combine(fieldList);
fieldList?.Clear(); //不排序
if (sort == null) return client.Find(filter).Project<T>(projection).Skip((pageIndex - 1) * pageSize).Limit(pageSize).ToList(); //排序查询
return client.Find(filter).Sort(sort).Project<T>(projection).Skip((pageIndex - 1) * pageSize).Limit(pageSize).ToList(); }
catch (Exception ex)
{
throw ex;
}
}
#endregion #region FindListByPageAsync 异步分页查询集合
/// <summary>
/// 异步分页查询集合
/// </summary>
/// <param name="host">mongodb连接信息</param>
/// <param name="filter">查询条件</param>
/// <param name="pageIndex">当前页</param>
/// <param name="pageSize">页容量</param>
/// <param name="field">要查询的字段,不写时查询全部</param>
/// <param name="sort">要排序的字段</param>
/// <returns></returns>
public static async Task<List<T>> FindListByPageAsync(MongodbHost host, FilterDefinition<T> filter, int pageIndex, int pageSize, string[] field = null, SortDefinition<T> sort = null)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
//不指定查询字段
if (field == null || field.Length == 0)
{
if (sort == null) return await client.Find(filter).Skip((pageIndex - 1) * pageSize).Limit(pageSize).ToListAsync();
//进行排序
return await client.Find(filter).Sort(sort).Skip((pageIndex - 1) * pageSize).Limit(pageSize).ToListAsync();
} //制定查询字段
var fieldList = new List<ProjectionDefinition<T>>();
for (int i = 0; i < field.Length; i++)
{
fieldList.Add(Builders<T>.Projection.Include(field[i].ToString()));
}
var projection = Builders<T>.Projection.Combine(fieldList);
fieldList?.Clear(); //不排序
if (sort == null) return await client.Find(filter).Project<T>(projection).Skip((pageIndex - 1) * pageSize).Limit(pageSize).ToListAsync(); //排序查询
return await client.Find(filter).Sort(sort).Project<T>(projection).Skip((pageIndex - 1) * pageSize).Limit(pageSize).ToListAsync(); }
catch (Exception ex)
{
throw ex;
}
}
#endregion #region Save 替换原数据表列 (字段删除添加) public static T Save(MongodbHost host, FilterDefinition<T> filter, T t)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
return client.FindOneAndReplace(filter, t);
}
catch (Exception ex)
{
throw ex;
}
} #endregion #region SaveAsync 替换原数据表列 (字段删除添加) public static async Task<T> SaveAsync(MongodbHost host, FilterDefinition<T> filter, T t)
{
try
{
var client = MongodbClient<T>.MongodbInfoClient(host);
return await client.FindOneAndReplaceAsync(filter, t);
}
catch (Exception ex)
{
throw ex;
}
} #endregion }
}

写好工具类我们就可以直接写增删改查了。


3、连接MongoDB编编写语句

3.1、插入

先定义实体类,下面就不在重复说定义实体了。

 [BsonIgnoreExtraElements]  //忽略增加项(MongoDB是文档型数据库,所以数据字段是根据传入的数据自动增加的,如果不忽略,增加项,查询返回实体就少了字段报错,当然也可以查询指定字段)
public class empty_collection
{
public ObjectId _id { get; set; } //主键
public string Name { get; set; } //姓名
public List<ClassTable> ClassTable { get; set; } //数据集合
public DateTime CreateDate { get; set; } //创建时间
} public class ClassTable
{
public string ItemName { get; set; } //键名
public string ItemValue { get; set; } //值
} //返回类型实体
public class ResultInfo
{
public int code { get; set; }
public string message { get; set; }
public object result { get; set; }
}

编写插入方法,注意看里面的注释,数据库连接的字符串格式、传值的类型等都有详细注释,这里就不进行啰嗦,直接上菜。

//插入
//GET api/values/InsertDate
[HttpGet("InsertDate")]
public JsonResult InsertDate()
{
ResultInfo res = new ResultInfo(); try
{
//连接mongodb的固定格式,应该写在配置里面,由于这里做演示,所以单独写
//user:user 第一个是用户名,第二个是密码
//localhost:27017 是你数据库的连接
//TestData 是你的数据库名称
var mongodbClient = "mongodb://user:user@localhost:27017/TestData";
MongodbHost mongodb = new MongodbHost(mongodbClient); mongodb.DataBase = "TestData"; //数据库名
mongodb.Table = "empty_collection"; //操作的数据表(如果数据库没有定义表名,插入时会自动定义) List<ClassTable> ctList = new List<ClassTable>();
int i = 0;
while(i<3)
{
ClassTable ct = new ClassTable();
switch (i)
{
case 0:
ct.ItemName = "班级";
ct.ItemValue = "取经天团";
break;
case 1:
ct.ItemName = "种族";
ct.ItemValue = "龙族";
break;
case 2:
ct.ItemName = "战斗力";
ct.ItemValue = "999999";
break;
}
ctList.Add(ct);
i++;
} empty_collection model = new empty_collection()
{
Name = "白龙马",
ClassTable = ctList,
CreateDate=DateTime.Now
};
List<empty_collection> Listmodel = new List<empty_collection>();
Listmodel.Add(model);
var resCount=TMongodbHelper<empty_collection>.InsertMany(mongodb, Listmodel); // 插入多条数据 res.code = resCount;
res.message = resCount > 0 ? "操作成功" : "操作失败";
}
catch (Exception ex)
{
res.code = -2;
res.message = "操作失败:" + ex.Message;
} return new JsonResult(res);
}

然后我们运行调用这个方法,查看一下数据库的值,很显然写入成功了。


3.2、查询

编写查询方法,然后调用这个方法。

 //查询
//GET api/values/GetDateList
[HttpGet("GetDateList")]
public JsonResult GetDateList()
{
ResultInfo res = new ResultInfo();
try
{
//连接mongodb的固定格式,应该写在配置里面,由于这里做演示,所以单独写
//user:user 第一个是用户名,第二个是密码
//localhost:27017 是你数据库的连接
//TestData 是你的数据库名称
var mongodbClient = "mongodb://user:user@localhost:27017/TestData";
MongodbHost mongodb = new MongodbHost(mongodbClient); mongodb.DataBase = "TestData"; //数据库名
mongodb.Table = "empty_collection"; //操作的数据表 #region 筛选条件(至少一个条件) var list = new List<FilterDefinition<empty_collection>>();
//Gte 大于等于 Lte 小于等于
list.Add(Builders<empty_collection>.Filter.Gte("CreateDate", "2021-01-01")); //注意:MongoDB当前方法查询需要必传至少一个参数,否则会报错
var filter = Builders<empty_collection>.Filter.And(list); #endregion var GetList = TMongodbHelper<empty_collection>.FindList(mongodb, filter).ToList(); //查询全部
//var GetList = TMongodbHelper<empty_collection>.FindListByPage(mongodb, filter, 1, 5, out count).ToList(); //分页查询
res.code = 0;
res.message = "查询成功";
res.result = GetList; }
catch (Exception ex)
{
res.code = -2;
res.message = ex.Message;
}
return new JsonResult(res);
}

需要注意的是,查询语句的数据库交互至少有一个条件


3.3、修改

编写修改方法,然后调用这个方法。

 //修改
//GET api/values/UpdateDate
[HttpGet("UpdateDate")]
public JsonResult UpdateDate()
{
ResultInfo res = new ResultInfo();
try
{
//连接mongodb的固定格式,应该写在配置里面,由于这里做演示,所以单独写
//user:user 第一个是用户名,第二个是密码
//localhost:27017 是你数据库的连接
//TestData 是你的数据库名称
var mongodbClient = "mongodb://user:user@localhost:27017/TestData";
MongodbHost mongodb = new MongodbHost(mongodbClient); mongodb.DataBase = "TestData"; //数据库名
mongodb.Table = "empty_collection"; //操作的数据表 //需要修改的条件
var UpdateList = new List<FilterDefinition<empty_collection>>();
UpdateList.Add(Builders<empty_collection>.Filter.Gte("CreateDate", "2021-01-01")); //注意:MongoDB当前方法查询需要必传至少一个参数,否则会报错
UpdateList.Add(Builders<empty_collection>.Filter.Eq("Name", "白龙马"));
var filterList = Builders<empty_collection>.Filter.And(UpdateList); //需要修改后的值
Dictionary<string, string> dicList = new Dictionary<string, string>();
dicList.Add("Name", "南无八部天龙广力菩萨");
dicList.Add("CreateDate", DateTime.Now.ToString()); var resCount = TMongodbHelper<empty_collection>.UpdateManay(mongodb, dicList, filterList); res.code = resCount.ModifiedCount > 0 ? 0 : -2;
res.message = resCount.ModifiedCount > 0 ? "操作成功" : "操作失败"; }
catch (Exception ex)
{
res.message = "操作失败:" + ex.Message;
}
return new JsonResult(res);
}


3.4、删除

编写删除方法,然后调用这个方法。

//删除
//GET api/values/DeleteDate
[HttpGet("DeleteDate")]
public JsonResult DeleteDate()
{
ResultInfo res = new ResultInfo();
try
{
//连接mongodb的固定格式,应该写在配置里面,由于这里做演示,所以单独写
//user:user 第一个是用户名,第二个是密码
//localhost:27017 是你数据库的连接
//TestData 是你的数据库名称
var mongodbClient = "mongodb://user:user@localhost:27017/TestData";
MongodbHost mongodb = new MongodbHost(mongodbClient); mongodb.DataBase = "TestData"; //数据库名
mongodb.Table = "empty_collection"; //操作的数据表 #region 筛选条件(至少一个条件) var list = new List<FilterDefinition<empty_collection>>();
//Gte 大于等于 Lte 小于等于
list.Add(Builders<empty_collection>.Filter.Gte("CreateDate", "2021-01-01")); //注意:MongoDB当前方法查询需要必传至少一个参数,否则会报错
list.Add(Builders<empty_collection>.Filter.Eq("Name", "南无八部天龙广力菩萨"));
var filter = Builders<empty_collection>.Filter.And(list); #endregion var resCount = TMongodbHelper<empty_collection>.DeleteMany(mongodb, filter); res.code = resCount.DeletedCount > 0 ? 0 : -2;
res.message = resCount.DeletedCount > 0 ? "操作成功" : "操作失败"; }
catch (Exception ex)
{
res.message = "操作失败:" + ex.Message;
}
return new JsonResult(res);
}


源码下载(git)

https://gitee.com/xiongze/MongoDBTest.git

https://gitee.com/xiongze/MongoDBTest


后语

NoSql非关系型数据库之MongoDB在项目中的初步应用我们就介绍到这里了,

有想法其他想法的可以在评论区留言讨论。

 
欢迎关注订阅微信公众号【熊泽有话说】,更多好玩易学知识等你来取

作者:熊泽-学习中的苦与乐
公众号:熊泽有话说


出处:https://www.cnblogs.com/xiongze520/p/15001789.html



创作不易,任何人或团体、机构全部转载或者部分转载、摘录,请在文章明显位置注明作者和原文链接。

NoSql非关系型数据库之MongoDB应用(三):MongoDB在项目中的初步应用的更多相关文章

  1. NoSql非关系型数据库之MongoDB应用(二):安装MongoDB可视化工具

    业精于勤,荒于嬉:行成于思,毁于随. 我们上次说到NoSql非关系型数据库之MongoDB应用(一):安装MongoDB服务 这次我们介绍安装  NoSQL Manager for MongoDB 可 ...

  2. 如何选择RDBMS关系型数据库和Nosql非关系型数据库?

    RDBMS关系型数据库和Nosql非关系型数据库区别: 一.RDBMS是关系型数据库模式: 1.二维模式,由行列组成. 2.非常强调事务原子性,例如用户提出一个请求,DB完整的去执行,如果报错就全部回 ...

  3. 关系型数据库和nosql非关系型数据库

    快下班了.突然和同事聊起了node+mongdb,因为我们这里的项目没有mongdb,就问后端的同事,我们'爱装逼'的后端的同事让我们先自己学习一下什么关系型数据库和非关系型数据库.一顿百度查询了解下 ...

  4. NoSQL非关系型数据库

    NoSQL 关注公众号"轻松学编程"了解更多. 一.概念 NoSQL(Not Only SQL)非关系型数据库(功能换效率). 优点 开发维护成本低 访问灵活 访问速度快(缓存+快 ...

  5. MongoDB(NoSQL) 非关系型数据库

    目录 简单了解 mongoDB 简单使用mongoDB 简单了解 mongoDB # NoSQL 泛指非关系型的数据库 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅 ...

  6. NoSql非关系型数据库之MongoDB应用(一):安装MongoDB服务

    业精于勤,荒于嬉:行成于思,毁于随. 一.MongoDB服务下载安装(windows环境安装) 1.进入官网:https://www.mongodb.com/,点击右上角的 Try Free  , 2 ...

  7. 关系型数据库 VS 非关系型数据库

    一.关系型数据库? 1.概念 关系型数据库是指采用了关系模型来组织数据的数据库.简单来说,关系模式就是二维表格模型. 主要代表:SQL Server,Oracle,Mysql,PostgreSQL. ...

  8. 非关系型数据库(NoSql)

    最近了解了一点非关系型数据库,刚刚接触,觉得这是一个很好的方向,对于大数据 方面的处理,非关系型数据库能起到至关重要的地位.这里我主要是整理了一些前辈的经验,仅供参考. 关系型数据库的特点 1.关系型 ...

  9. 大数据时代的数据存储,非关系型数据库MongoDB

    在过去的很长一段时间中,关系型数据库(Relational Database Management System)一直是最主流的数据库解决方案,他运用真实世界中事物与关系来解释数据库中抽象的数据架构. ...

随机推荐

  1. TEB 系统综合误差

    TEB  系统综合误差  和森世籍  聊天得知 该TEB  包括  传感器误差  温度  系统误差等等

  2. redis 基本操作命令

    redis 基本操作 String 操作字符串 1 SET key value 设置指定 key 的值 ​ 2 GET key 获取指定 key 的值. ​ 3 GETRANGE key start ...

  3. 浅谈:Redis持久化机制(一)RDB篇

    浅谈:Redis持久化机制(一)RDB篇 ​ 众所周知,redis是一款性能极高,基于内存的键值对NoSql数据库,官方显示,它的读效率可达到11万次每秒,写效率能达到8万次每秒,因为它基于内存以及存 ...

  4. nmap扫描端口导致线上大量Java服务FullGC甚至OOM

    nmap扫描端口导致线上大量Java服务FullGC甚至OOM 最近公司遇到了一次诡异的线上FullGC保障,多个服务几乎所有的实例集中报FullGC,个别实例甚至出现了OOM,直接被docker杀掉 ...

  5. Halide应用开发

    Halide应用开发 1. 基本原理 1.1.介绍 随着人工智能的普及,深度学习网络的不断涌现,为了让各硬件(CPU, GPU, NPU,...)能够支持深度学习应用,各硬件芯片需要软件库去支持高性能 ...

  6. Keras神经网络集成技术

    Keras神经网络集成技术 create_keras_neuropod 将Keras模型打包为神经网络集成包.目前,上文已经支持TensorFlow后端. create_keras_neuropod( ...

  7. Docker系列——Grafana+Prometheus+Node-exporter微信推送(三)

    在之前博文中,已经成功的实现了邮件推送.目前主流的办公终端,就是企业微信.钉钉.飞书.今天来分享下微信推送,我们具体来看. 企业微信 在配置企业微信推送时,需要有微信企业,具体如何注册.使用,另外百度 ...

  8. C++标准模板库(STL)——queue常见用法详解

    queue的定义 queue<typename> name; queue容器内元素的访问 由于队列本身就是一种先进先出的限制性数据结构,因此在STL中只能通过front()来访问队首元素, ...

  9. linux远程和软件包的管理

    远程管理 ssh   用户名@对方IP地址 -X   在本地可以运行对方的图形程序 端口 22 [root@room9pc01 ~]# ssh root@172.25.0.11 [root@serve ...

  10. 【渗透实战】sqlmap_修改tamper脚本_绕过WAF_第三期

    /文章作者:Kali_MG1937 CSDN博客号:ALDYS4 QQ:3496925334/ 今天google找注入点的时候发现某企业一个挺有意思的waf 常规操作绕过去后决定写一篇博客 信息收集 ...