using TEAMModelOS.SDK.Module.LiteDB.Configuration; using TEAMModelOS.SDK.Module.LiteDB.Interfaces; using LiteDB; using System; using System.Collections.Generic; using System.Linq; using TEAMModelOS.SDK.Helper.Common.JsonHelper; using TEAMModelOS.SDK.Context.Exception; namespace TEAMModelOS.SDK.Module.LiteDB.Implements { public class LiteDBOperator : ILiteDBOperator { private readonly LiteDatabase database; public LiteDBOperator(LiteDBOptions options) { database = LiteDatabaseSingleton.GetInstance(options.ConnectionString).GetDatabase(); } /// /// 保存单个对象 /// /// /// /// public string Save(T obj) where T : new() { //var db = LiteDBSingleton.getInstance().GetLiteDatabase(); // Open data file (or create if not exits) Type t = typeof(T); // Get a collection (or create, if not exits) var col = database.GetCollection(t.Name.ToString()); // Insert new customer document var value = col.Insert(obj); return value.ToString(); } /// /// 获取全部数据 /// /// /// public IList FindAll() where T : new() { // Open data file (or create if not exits) // var db = LiteDBSingleton.getInstance().GetLiteDatabase(); Type t = typeof(T); // Get a collection (or create, if not exits) var col = database.GetCollection(t.Name.ToString()); var docs = col.FindAll(); return docs.ToList(); } /// /// 保存单个对象 /// /// /// /// public int SaveAll(List obj) where T : new() { // Open data file (or create if not exits) // var db = LiteDBSingleton.getInstance().GetLiteDatabase(); Type t = typeof(T); // Get a collection (or create, if not exits) var col = database.GetCollection(t.Name.ToString()); // Insert new customer document var value = col.Insert(obj); return value; } /// /// 更新单个对象 /// /// /// /// public bool Update(T obj) where T : new() { // Open data file (or create if not exits) // var db = LiteDBSingleton.getInstance().GetLiteDatabase(); Type t = typeof(T); // Get a collection (or create, if not exits) var col = database.GetCollection(t.Name.ToString()); // Update a document inside a collection try { var success = col.Update(obj); return success; } catch (Exception e) { var s = e.Message; } return false; } /// /// 更新多个对象 /// /// /// /// public int UpdateAll(List obj) where T : new() { // Open data file (or create if not exits) // var db = LiteDBSingleton.getInstance().GetLiteDatabase(); Type t = typeof(T); // Get a collection (or create, if not exits) var col = database.GetCollection(t.Name.ToString()); // Update a document inside a collection try { var success = col.Update(obj); return success; } catch (Exception e) { var s = e.Message; } return 0; } /// /// 删除对象 /// /// /// /// public bool Delete(dynamic docId) { // Open data file (or create if not exits) // var db = LiteDBSingleton.getInstance().GetLiteDatabase(); Type t = typeof(T); // Get a collection (or create, if not exits) var col = database.GetCollection(t.Name.ToString()); var success = col.Delete(docId); return success; } /// /// 根据ID获取 /// /// /// /// public T FindById(dynamic docId) where T : new() { // Open data file (or create if not exits) // var db = LiteDBSingleton.getInstance().GetLiteDatabase(); Type t = typeof(T); // Get a collection (or create, if not exits) var col = database.GetCollection(t.Name.ToString()); var doc = col.FindById(docId); // String inf = doc.AsDocument.ToString(); return MessagePackHelper.JsonToObject(doc.ToString()); } /// /// 根据key-value方式获取 匹配查询 /// /// /// /// public T FindOneByDict(Dictionary dict) where T : new() { // Open data file (or create if not exits) // var db = LiteDBSingleton.getInstance().GetLiteDatabase(); Type t = typeof(T); // Get a collection (or create, if not exits) var col = database.GetCollection(t.Name.ToString()); // var doc = col.FindById(docId); // String inf = doc.AsDocument.ToString(); IList queries = new List(); if (dict != null && dict.Count > 0) { var keys = dict.Keys; foreach (String key in dict.Keys) { if (dict[key] != null && !string.IsNullOrEmpty(dict[key].ToString())) { queries.Add(Query.EQ(key, dict[key].ToString())); } } } var doc = new List(); if (queries != null && queries.Count > 1) { doc = col.Find(Query.And(queries.ToArray())).ToList(); } else if (queries != null && queries.Count() == 1) { doc = col.Find(queries.ToArray()[0]).ToList(); } else { throw new BizException("请输入查询条件!"); } if (doc != null && doc.Count > 0) { return MessagePackHelper.JsonToObject(doc[0].ToString()); } else { return new T(); } } /// /// 根据key-value方式获取 匹配查询 /// /// /// /// /// public T FindOneByKey(String key, String value) where T : new() { // Open data file (or create if not exits) // var db = LiteDBSingleton.getInstance().GetLiteDatabase(); Type t = typeof(T); // Get a collection (or create, if not exits) var col = database.GetCollection(t.Name.ToString()); // var doc = col.FindById(docId); // String inf = doc.AsDocument.ToString(); var doc = col.Find(Query.EQ(key, value)).ToList(); if (doc != null && doc.Count > 0) { return MessagePackHelper.JsonToObject(doc[0].ToString()); } else { return new T(); } } /// /// 根据key-value方式获取 匹配查询 /// /// /// /// public IList FindListByDict(Dictionary dict) where T : new() { // Open data file (or create if not exits) // var db = LiteDBSingleton.getInstance().GetLiteDatabase(); Type t = typeof(T); // Get a collection (or create, if not exits) var col = database.GetCollection(t.Name.ToString()); // var doc = col.FindById(docId); // String inf = doc.AsDocument.ToString(); IList queries = new List(); if (dict != null && dict.Count > 0) { var keys = dict.Keys; foreach (String key in dict.Keys) { if (dict[key] != null && !string.IsNullOrEmpty(dict[key].ToString())) { queries.Add(Query.EQ(key, dict[key].ToString())); } } } var doc = new List(); if (queries != null && queries.Count > 1) { doc = col.Find(Query.And(queries.ToArray())).ToList(); } else if (queries != null && queries.Count() == 1) { doc = col.Find(queries.ToArray()[0]).ToList(); } else { // throw new BizException("请输入查询条件!"); doc = col.FindAll().ToList(); } return MessagePackHelper.JsonToObject>(doc.ToString()); } /// /// 根据key-value方式获取列表 匹配查询 /// /// /// /// /// public IList FindListByKey(String key, String value) where T : new() { // Open data file (or create if not exits) // var db = LiteDBSingleton.getInstance().GetLiteDatabase(); Type t = typeof(T); // Get a collection (or create, if not exits) var col = database.GetCollection(t.Name.ToString()); var doc = col.Find(Query.EQ(key, value)).ToList(); return MessagePackHelper.JsonToObject>(doc.ToString()); } /// /// 根据key-value方式获取 匹配查询 /// /// /// /// public IList FindListByDictAndLike(Dictionary dict, Dictionary likeDict) where T : new() { // Open data file (or create if not exits) // var db = LiteDBSingleton.getInstance().GetLiteDatabase(); Type t = typeof(T); // Get a collection (or create, if not exits) var col = database.GetCollection(t.Name.ToString()); // var doc = col.FindById(docId); // String inf = doc.AsDocument.ToString(); IList queries = new List(); if (null != dict && dict.Count > 0) { var keys = dict.Keys; foreach (String key in keys) { if (dict[key] != null && !string.IsNullOrEmpty(dict[key].ToString())) { queries.Add(Query.EQ(key, dict[key].ToString())); } } } if (null != likeDict && likeDict.Count > 0) { var keys = likeDict.Keys; foreach (String key in keys) { if (likeDict[key] != null && !string.IsNullOrEmpty(likeDict[key].ToString())) { queries.Add(Query.Contains(key, likeDict[key].ToString())); } } } var doc = new List(); if (queries != null && queries.Count() > 1) { doc = col.Find(Query.And(queries.ToArray())).ToList(); } else if (queries != null && queries.Count() == 1) { doc = col.Find(queries.ToArray()[0]).ToList(); } else { //throw new BizException("请输入查询条件!"); doc = col.FindAll().ToList(); } return MessagePackHelper.JsonToObject>(doc.ToString()); } /// /// 根据key-value方式获取 匹配查询 /// /// /// /// public IList FindListByDictAndLikeAndStartWith( Dictionary dict, Dictionary likeDict, Dictionary startDict) where T : new() { // Open data file (or create if not exits) // var db = LiteDBSingleton.getInstance().GetLiteDatabase(); Type t = typeof(T); // Get a collection (or create, if not exits) var col = database.GetCollection(t.Name.ToString()); // var doc = col.FindById(docId); // String inf = doc.AsDocument.ToString(); IList queries = new List(); if (null != dict && dict.Count > 0) { var keys = dict.Keys; foreach (String key in keys) { if (dict[key] != null && !string.IsNullOrEmpty(dict[key].ToString())) { queries.Add(Query.EQ(key, dict[key].ToString())); } } } if (null != likeDict && likeDict.Count > 0) { var keys = likeDict.Keys; foreach (String key in keys) { if (likeDict[key] != null && !string.IsNullOrEmpty(likeDict[key].ToString())) { queries.Add(Query.Contains(key, likeDict[key].ToString())); } } } if (null != startDict && startDict.Count > 0) { var keys = startDict.Keys; foreach (String key in keys) { if (startDict[key] != null && !string.IsNullOrEmpty(startDict[key].ToString())) { queries.Add(Query.StartsWith(key, startDict[key].ToString())); } } } var doc = new List(); if (queries != null && queries.Count() > 1) { doc = col.Find(Query.And(queries.ToArray())).ToList(); } else if (queries != null && queries.Count() == 1) { doc = col.Find(queries.ToArray()[0]).ToList(); } else { //throw new BizException("请输入查询条件!"); doc = col.FindAll().ToList(); } return MessagePackHelper.JsonToObject>(doc.ToString()); } /// /// 根据key-value方式获取 匹配查询 /// /// /// /// public IList FindListByDictAndLikeAndNotEQ(Dictionary dict, Dictionary likeDict, Dictionary notEQDict) where T : new() { // Open data file (or create if not exits) // var db = LiteDatabaseSingleton.getInstance().GetLiteDatabase(); Type t = typeof(T); // Get a collection (or create, if not exits) var col = database.GetCollection(t.Name.ToString()); // var doc = col.FindById(docId); // String inf = doc.AsDocument.ToString(); IList queries = new List(); if (null != dict && dict.Count > 0) { var keys = dict.Keys; foreach (String key in keys) { if (dict[key] != null && !string.IsNullOrEmpty(dict[key].ToString())) { queries.Add(Query.EQ(key, dict[key].ToString())); } } } if (null != likeDict && likeDict.Count > 0) { var keys = likeDict.Keys; foreach (String key in keys) { if (likeDict[key] != null && !string.IsNullOrEmpty(likeDict[key].ToString())) { queries.Add(Query.Contains(key, likeDict[key].ToString())); } } } if (null != notEQDict && notEQDict.Count > 0) { var keys = notEQDict.Keys; foreach (String key in keys) { if (notEQDict[key] != null && !string.IsNullOrEmpty(notEQDict[key].ToString())) { queries.Add(Query.Not(key, notEQDict[key].ToString())); } } } var doc = new List(); if (queries != null && queries.Count() > 1) { doc = col.Find(Query.And(queries.ToArray())).ToList(); } else if (queries != null && queries.Count() == 1) { doc = col.Find(queries.ToArray()[0]).ToList(); } else { // throw new BizException("请输入查询条件!"); doc = col.FindAll().ToList(); } return MessagePackHelper.JsonToObject>(doc.ToString()); } } }