最近比较忙,很久没更新了(虽然没人看,也没人在乎,也要记得be yourself),
前面分享了一些mongodb的安装和简单的语法,今天模仿支付宝首页的模块移动功能,用mongo做一个简单的后台实例。
one,启动本地的mongo服务like this.
two,连接mongo可视化界面,建立PersonModule的文档集合。
three,配置默认模块,我这边了个公共xml里。
<?xml version="1.0" encoding="utf-8" ?> <root> <model name="HomePage"> <nodes name="DefaulModule"> <node id="1" name="转账"/> <node id="2" name="共享单车"/> <node id="3" name="电影票"/> <node id="4" name="出行"/> </nodes> </model > </root>
four,正式开工。
1.初始化首页模块。
/// <summary> /// 初始化模块 /// </summary> public void InitModule() { var DefaultModule = XmlHelper.GetXmlDic("HomePage", "DefaulModule"); var personModule = new PersonalModule(); List<BsonDocument> docs = new List<BsonDocument>(); //添加id=1,2,3三个人的首页模块 for (var i = 1; i < 4; i++) { personModule.PersonId = i; personModule.Module = DefaultModule; //一个人一个人添加 var json = JsonHelper.SerializeObject(personModule); //mongoServer.Insert(collationName, json); //批量添加 BsonDocument document = BsonDocument.Parse(json); docs.Add(document); } //导入mongodb mongoServer.ImportBatch("PersonModule", docs); }
2.个人PersonId=1的,添加模块(Id=5,Name=“余额”)
/// <summary> /// 添加模块 /// </summary> public void AddModule() { var arrName = "Module"; var model = new Module() { Id = 5, Name = "余额" }; var json = JsonHelper.SerializeObject(model); var filter = new BsonDocument(); // 更新条件 filter.Add("PersonId", 1); //集合名称,查询条件,添加的对象,需要添加的数组名称 mongoServer.UpdatePushArray(collationName, filter, json, arrName); }
3.移除模块,移除个人PersonId=2,id=4的模块。
/// <summary> /// 移除模块 /// </summary> public void RemoveModule() { var arrName = "Module"; var filter = new BsonDocument(); // 更新条件 filter.Add("PersonId", 2); //移除PersonId=2的数组名称为"Module",id=4的对象 var doc = new BsonDocument() { new BsonElement(arrName, new BsonDocument() { new BsonElement("Id", 4) })}; mongoServer.UpdatePullArray(collationName, filter, doc); }
4.移动或者移动并删除模块
/// <summary> /// 移动或者移动并移除模块 /// </summary> public void MoveModule() { var arrName = "Module"; // 更新条件 var filter = new BsonDocument(); filter.Add("PersonId", 3); var moduleList = new List<Module>(); moduleList.Add(new Module { Id = 2,Name= "共享单车" }); moduleList.Add(new Module { Id = 1, Name = "转账" }); moduleList.Add(new Module { Id = 4, Name = "出行" }); var json = JsonHelper.SerializeObject(moduleList); mongoServer.UpdateArray(collationName, filter, json, arrName); }
mongoServer类。
public class MongoServer { private IMongoDatabase database = null; private string server = System.Configuration.ConfigurationManager.AppSettings["MongoServer"]; private string port = System.Configuration.ConfigurationManager.AppSettings["MongoPort"]; private string db = System.Configuration.ConfigurationManager.AppSettings["DBName"]; public MongoServer() { Init(); } public void Init() { var client = new MongoClient($"mongodb://{server}:{port}"); database = client.GetDatabase(db); } /// <summary> /// 查询一条 /// </summary> /// <param name="tablename"></param> /// <param name="query"></param> /// <returns></returns> public string FindOne(string tablename, BsonDocument filter) { var collection = database.GetCollection<BsonDocument>(tablename); var documents = collection.Find(filter).FirstOrDefault(); return documents == null ? "" : documents.ToJson(); } /// <summary> /// update /// </summary> /// <param name="collectionName"></param> /// <param name="filter"></param> /// <param name="update"></param> public void Update(string collectionName, BsonDocument filter, BsonDocument update) { var collection = database.GetCollection<BsonDocument>(collectionName); collection.FindOneAndUpdate(filter, update); } /// <summary> /// insert /// </summary> /// <param name="collectionName"></param> /// <param name="json"></param> public void Insert(string collectionName, string json) { var collection = database.GetCollection<BsonDocument>(collectionName); BsonDocument document = BsonDocument.Parse(json); collection.InsertOne(document); } /// <summary> /// delete /// </summary> /// <param name="collectionName"></param> /// <param name="json"></param> public void Delete(string collectionName, BsonDocument query) { var collection = database.GetCollection<BsonDocument>(collectionName); collection.FindOneAndDelete(query); } /// <summary> /// 批量导入 /// </summary> /// <param name="collectionName"></param> /// <param name="docs"></param> public void ImportBatch(string collectionName, List<BsonDocument> docs) { var collection = database.GetCollection<BsonDocument>(collectionName); collection.InsertMany(docs); } /// <summary> /// 添加一条数组 /// </summary> /// <param name="collectionName">集合名</param> /// <param name="filter">条件</param> /// <param name="json">更新内容</param> /// <param name="arrayName">数组名</param> public void UpdatePushArray(string collectionName, BsonDocument filter, string json, string arrayName) { //更新mongo简历 var update = new BsonDocument(); BsonDocument document = BsonDocument.Parse(json); //添加doucment数组对象 update.Add("$push", new BsonDocument() { new BsonElement(arrayName, document) }); //更新修改时间 //update.Add("$set", new BsonDocument() { // new BsonElement("",""), // }); Update(collectionName, filter, update); } /// <summary> /// 删除一条数组 /// </summary> /// <param name="collectionName"></param> /// <param name="filter"></param> /// <param name="arrDoc"></param> public void UpdatePullArray(string collectionName, BsonDocument filter, BsonDocument arrDoc) { //更新mongo简历 var update = new BsonDocument(); //$pull删除对象数组idName=id的对象文档 update.Add("$pull", arrDoc); Update(collectionName, filter, update); } /// <summary> /// 更新数组 /// </summary> /// <param name="tableName"></param> /// <param name="json"></param> /// <param name="arrayName"></param> public void UpdateArray(string collectionName, BsonDocument filter, string json, string arrayName) { //更新mongo简历 var update = new BsonDocument(); var update1 = new BsonDocument(); //删除原有数组文档 update.Set("$unset", new BsonDocument() { new BsonElement(arrayName, "") }); Update(collectionName, filter, update); //set新的数组 json = "{ \"" + arrayName + "\" :" + json + "}"; BsonDocument document = BsonDocument.Parse(json); update1.Set("$set", document); Update(collectionName, filter, update1); } }
最后,注意给document赋值时候的大小写问题。还有需要引用System.Runtime.InteropServices.RuntimeInformation包。