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());
}
}
}