最近比较忙,很久没更新了(虽然没人看,也没人在乎,也要记得be yourself),
前面分享了一些mongodb的安装和简单的语法,今天模仿支付宝首页的模块移动功能,用mongo做一个简单的后台实例。
one,启动本地的mongo服务like this.

two,连接mongo可视化界面,建立PersonModule的文档集合。


three,配置默认模块,我这边了个公共xml里。
1<?xml version="1.0" encoding="utf-8" ?> 2 3<root> 4 <model name="HomePage"> 5 <nodes name="DefaulModule"> 6 <node id="1" name="转账"/> 7 <node id="2" name="共享单车"/> 8 <node id="3" name="电影票"/> 9 <node id="4" name="出行"/> 10 </nodes> 11 </model > 12</root>
four,正式开工。
1.初始化首页模块。
1 /// <summary> 2 /// 初始化模块 3 /// </summary> 4 public void InitModule() 5 { 6 var DefaultModule = XmlHelper.GetXmlDic("HomePage", "DefaulModule"); 7 var personModule = new PersonalModule(); 8 List<BsonDocument> docs = new List<BsonDocument>(); 9 //添加id=1,2,3三个人的首页模块 10 for (var i = 1; i < 4; i++) 11 { 12 personModule.PersonId = i; 13 personModule.Module = DefaultModule; 14 //一个人一个人添加 15 var json = JsonHelper.SerializeObject(personModule); 16 //mongoServer.Insert(collationName, json); 17 //批量添加 18 BsonDocument document = BsonDocument.Parse(json); 19 docs.Add(document); 20 } 21 //导入mongodb 22 mongoServer.ImportBatch("PersonModule", docs); 23 }

2.个人PersonId=1的,添加模块(Id=5,Name=“余额”)
1 /// <summary> 2 /// 添加模块 3 /// </summary> 4 public void AddModule() 5 { 6 var arrName = "Module"; 7 var model = new Module() { Id = 5, Name = "余额" }; 8 var json = JsonHelper.SerializeObject(model); 9 var filter = new BsonDocument(); 10 // 更新条件 11 filter.Add("PersonId", 1); 12 //集合名称,查询条件,添加的对象,需要添加的数组名称 13 mongoServer.UpdatePushArray(collationName, filter, json, arrName); 14 }

3.移除模块,移除个人PersonId=2,id=4的模块。
1 /// <summary> 2 /// 移除模块 3 /// </summary> 4 public void RemoveModule() 5 { 6 var arrName = "Module"; 7 var filter = new BsonDocument(); 8 // 更新条件 9 filter.Add("PersonId", 2); 10 //移除PersonId=2的数组名称为"Module",id=4的对象 11 var doc = new BsonDocument() { 12 new BsonElement(arrName, 13 new BsonDocument() { 14 new BsonElement("Id", 4) })}; 15 mongoServer.UpdatePullArray(collationName, filter, doc); 16 }

4.移动或者移动并删除模块
1 /// <summary> 2 /// 移动或者移动并移除模块 3 /// </summary> 4 public void MoveModule() 5 { 6 var arrName = "Module"; 7 // 更新条件 8 var filter = new BsonDocument(); 9 filter.Add("PersonId", 3); 10 var moduleList = new List<Module>(); 11 moduleList.Add(new Module { Id = 2,Name= "共享单车" }); 12 moduleList.Add(new Module { Id = 1, Name = "转账" }); 13 moduleList.Add(new Module { Id = 4, Name = "出行" }); 14 var json = JsonHelper.SerializeObject(moduleList); 15 mongoServer.UpdateArray(collationName, filter, json, arrName); 16 }

mongoServer类。
1public class MongoServer 2 { 3 private IMongoDatabase database = null; 4 private string server = System.Configuration.ConfigurationManager.AppSettings["MongoServer"]; 5 private string port = System.Configuration.ConfigurationManager.AppSettings["MongoPort"]; 6 private string db = System.Configuration.ConfigurationManager.AppSettings["DBName"]; 7 public MongoServer() 8 { 9 Init(); 10 } 11 public void Init() 12 { 13 var client = new MongoClient($"mongodb://{server}:{port}"); 14 database = client.GetDatabase(db); 15 } 16 /// <summary> 17 /// 查询一条 18 /// </summary> 19 /// <param name="tablename"></param> 20 /// <param name="query"></param> 21 /// <returns></returns> 22 public string FindOne(string tablename, BsonDocument filter) 23 { 24 var collection = database.GetCollection<BsonDocument>(tablename); 25 var documents = collection.Find(filter).FirstOrDefault(); 26 return documents == null ? "" : documents.ToJson(); 27 } 28 /// <summary> 29 /// update 30 /// </summary> 31 /// <param name="collectionName"></param> 32 /// <param name="filter"></param> 33 /// <param name="update"></param> 34 public void Update(string collectionName, BsonDocument filter, BsonDocument update) 35 { 36 var collection = database.GetCollection<BsonDocument>(collectionName); 37 collection.FindOneAndUpdate(filter, update); 38 } 39 /// <summary> 40 /// insert 41 /// </summary> 42 /// <param name="collectionName"></param> 43 /// <param name="json"></param> 44 public void Insert(string collectionName, string json) 45 { 46 var collection = database.GetCollection<BsonDocument>(collectionName); 47 BsonDocument document = BsonDocument.Parse(json); 48 collection.InsertOne(document); 49 } 50 /// <summary> 51 /// delete 52 /// </summary> 53 /// <param name="collectionName"></param> 54 /// <param name="json"></param> 55 public void Delete(string collectionName, BsonDocument query) 56 { 57 var collection = database.GetCollection<BsonDocument>(collectionName); 58 collection.FindOneAndDelete(query); 59 } 60 /// <summary> 61 /// 批量导入 62 /// </summary> 63 /// <param name="collectionName"></param> 64 /// <param name="docs"></param> 65 public void ImportBatch(string collectionName, List<BsonDocument> docs) 66 { 67 var collection = database.GetCollection<BsonDocument>(collectionName); 68 collection.InsertMany(docs); 69 } 70 /// <summary> 71 /// 添加一条数组 72 /// </summary> 73 /// <param name="collectionName">集合名</param> 74 /// <param name="filter">条件</param> 75 /// <param name="json">更新内容</param> 76 /// <param name="arrayName">数组名</param> 77 public void UpdatePushArray(string collectionName, BsonDocument filter, string json, string arrayName) 78 { 79 //更新mongo简历 80 var update = new BsonDocument(); 81 BsonDocument document = BsonDocument.Parse(json); 82 //添加doucment数组对象 83 update.Add("$push", new BsonDocument() { new BsonElement(arrayName, document) }); 84 //更新修改时间 85 //update.Add("$set", new BsonDocument() { 86 // new BsonElement("",""), 87 // }); 88 Update(collectionName, filter, update); 89 } 90 /// <summary> 91 /// 删除一条数组 92 /// </summary> 93 /// <param name="collectionName"></param> 94 /// <param name="filter"></param> 95 /// <param name="arrDoc"></param> 96 public void UpdatePullArray(string collectionName, BsonDocument filter, BsonDocument arrDoc) 97 { 98 //更新mongo简历 99 var update = new BsonDocument(); 100 //$pull删除对象数组idName=id的对象文档 101 update.Add("$pull", arrDoc); 102 Update(collectionName, filter, update); 103 } 104 /// <summary> 105 /// 更新数组 106 /// </summary> 107 /// <param name="tableName"></param> 108 /// <param name="json"></param> 109 /// <param name="arrayName"></param> 110 public void UpdateArray(string collectionName, BsonDocument filter, string json, string arrayName) 111 { 112 //更新mongo简历 113 var update = new BsonDocument(); 114 var update1 = new BsonDocument(); 115 //删除原有数组文档 116 update.Set("$unset", new BsonDocument() { new BsonElement(arrayName, "") }); 117 Update(collectionName, filter, update); 118 //set新的数组 119 json = "{ \"" + arrayName + "\" :" + json + "}"; 120 BsonDocument document = BsonDocument.Parse(json); 121 update1.Set("$set", document); 122 Update(collectionName, filter, update1); 123 } 124 }
最后,注意给document赋值时候的大小写问题。还有需要引用System.Runtime.InteropServices.RuntimeInformation包。