您的位置:首页 > 数据库 > Mongodb

MongoDB的C#封装类

2016-07-04 18:34 507 查看
代码:

samus驱动

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MongoDB;
using MongoDB.GridFS;

namespace CompanyName.DepartmentName.Common.Util
{
public class MongoHelper
{
public static readonly string connectionString = "Servers=127.0.0.1:2222;ConnectTimeout=30000;ConnectionLifetime=300000;MinimumPoolSize=8;MaximumPoolSize=256;Pooled=true";
public static readonly string database = "DiDiDataBase";

#region 新增
/// <summary>
/// 插入新数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="collectionName"></param>
/// <param name="entiry"></param>
public static void InsertOne<T>(string collectionName, T entity) where T : class
{
using (Mongo mongo = new Mongo(connectionString))
{
mongo.Connect();
IMongoDatabase friends = mongo.GetDatabase(database);
IMongoCollection<T> categories = friends.GetCollection<T>(collectionName);
categories.Insert(entity, true);
mongo.Disconnect();

}
}
/// <summary>
/// 插入多个数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="collectionName"></param>
/// <param name="entiry"></param>
public static void InsertAll<T>(string collectionName, IEnumerable<T> entity) where T : class
{
using (Mongo mongo = new Mongo(connectionString))
{
mongo.Connect();
IMongoDatabase friends = mongo.GetDatabase(database);
IMongoCollection<T> categories = friends.GetCollection<T>(collectionName);
categories.Insert(entity, true);
mongo.Disconnect();

}
}
#endregion

#region 更新
/// <summary>
/// 更新操作
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="collectionName">表名</param>
/// <param name="query">条件</param>
/// <param name="entry">新实体</param>
public static void Update<T>(string collectionName, Document entity, Document query) where T : class
{
using (Mongo mongo = new Mongo(connectionString))
{
mongo.Connect();
IMongoDatabase friends = mongo.GetDatabase(database);
IMongoCollection<T> categories = friends.GetCollection<T>(collectionName);
categories.Update(entity, query, true);
mongo.Disconnect();
}
}
/// <summary>
/// 更新操作
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="collectionName">表名</param>
/// <param name="query">条件</param>
/// <param name="entry">新实体</param>
public static void UpdateAll<T>(string collectionName, Document entity, Document query) where T : class
{
using (Mongo mongo = new Mongo(connectionString))
{
mongo.Connect();
IMongoDatabase friends = mongo.GetDatabase(database);
IMongoCollection<T> categories = friends.GetCollection<T>(collectionName);
categories.Update(entity, query, UpdateFlags.MultiUpdate, true);
mongo.Disconnect();
}
}
#endregion

#region 查询
/// <summary>
/// 获取一条数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="collectionName"></param>
/// <param name="query"></param>
/// <returns></returns>
public static T GetOne<T>(string collectionName, Document query) where T : class
{
T result = default(T);
using (Mongo mongo = new Mongo(connectionString))
{
mongo.Connect();
IMongoDatabase friends = mongo.GetDatabase(database);
IMongoCollection<T> categories = friends.GetCollection<T>(collectionName);
result = categories.FindOne(query);
mongo.Disconnect();

}
return result;
}
/// <summary>
/// 获取一条数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="collectionName"></param>
/// <param name="query"></param>
/// <returns></returns>
public static T GetOne<T>(string collectionName, Document query, Document fields) where T : class
{
T result = default(T);
using (Mongo mongo = new Mongo(connectionString))
{
mongo.Connect();
IMongoDatabase friends = mongo.GetDatabase(database);
IMongoCollection<T> categories = friends.GetCollection<T>(collectionName);
result = categories.Find(query, fields).Skip(0).Limit(1).Documents.First();
mongo.Disconnect();

}
return result;
}
/// <summary>
/// 获取一个集合下所有数据
/// </summary>
/// <param name="collectionName"></param>
/// <returns></returns>
public static List<T> GetAll<T>(string collectionName) where T : class
{
List<T> result = new List<T>();
using (Mongo mongo = new Mongo(connectionString))
{
mongo.Connect();
IMongoDatabase friends = mongo.GetDatabase(database);
IMongoCollection<T> categories = friends.GetCollection<T>(collectionName);
foreach (T entity in categories.FindAll().Limit(50).Documents)
{
result.Add(entity);
}
mongo.Disconnect();

}
return result;
}
/// <summary>
/// 获取列表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="collectionName"></param>
/// <param name="query"></param>
/// <param name="Sort"></param>
/// <param name="cp"></param>
/// <param name="mp"></param>
/// <returns></returns>
public static List<T> GetList<T>(string collectionName, object selector, Document sort, int cp, int mp) where T : class
{
List<T> result = new List<T>();
using (Mongo mongo = new Mongo(connectionString))
{
mongo.Connect();
IMongoDatabase friends = mongo.GetDatabase(database);
IMongoCollection<T> categories = friends.GetCollection<T>(collectionName);
foreach (T entity in categories.Find(selector).Sort(sort).Skip((cp - 1) * mp).Limit(mp).Documents)
{
result.Add(entity);
}
mongo.Disconnect();

}
return result;
}
/// <summary>
/// 获取列表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="collectionName"></param>
/// <param name="query"></param>
/// <param name="Sort"></param>
/// <param name="cp"></param>
/// <param name="mp"></param>
/// <returns></returns>
public static List<T> GetList<T>(string collectionName, object selector, object fields, Document sort, int cp, int mp) where T : class
{
List<T> result = new List<T>();
using (Mongo mongo = new Mongo(connectionString))
{
mongo.Connect();
IMongoDatabase friends = mongo.GetDatabase(database);
IMongoCollection<T> categories = friends.GetCollection<T>(collectionName);
foreach (T entity in categories.Find(selector, fields).Sort(sort).Skip((cp - 1) * mp).Limit(mp).Documents)
{
result.Add(entity);
}
mongo.Disconnect();

}
return result;
}
#endregion

#region 删除
/// <summary>
/// 删除数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="collectionName"></param>
/// <param name="entity"></param>
public static void Delete<T>(string collectionName, Document query) where T : class
{
using (Mongo mongo = new Mongo(connectionString))
{
mongo.Connect();
IMongoDatabase friends = mongo.GetDatabase(database);
IMongoCollection<T> categories = friends.GetCollection<T>(collectionName);
categories.Remove(query, true);
mongo.Disconnect();
}
}
#endregion
}
}


添加索引:

db.T_OrderInfo.ensureIndex( { OriginPoint : "2dsphere" ,TerminalPoint:"2dsphere" } )


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using CompanyName.DepartmentName.Models;
using CompanyName.DepartmentName.Common.Util;
using MongoDB;
using MongoDB.Linq;
using MongoDB.GridFS;

namespace CompanyName.DepartmentName.Functions
{
public class PollMongodbData
{
DBEntities entity = new DBEntities();
public void Poll()
{
int PageSize = 2000;
int CurrentPage = 1;
//范围
int Range = 2000;//单位米
List<OrderInfo> result = new List<OrderInfo>();
MongoDBHelper<OrderInfo> helper = new MongoDBHelper<OrderInfo>("T_OrderInfo");
var doc = new Document();
doc.Add("ActiveTime", new Document("$gt", DateTime.Now));
doc.Add("IsDelete", false);
var sort = new Document();
sort.Add("CreateTime", 1);
bool IsBreak = false;
while (!IsBreak)
{
List<OrderInfo> DataList = MongoHelper.GetList<OrderInfo>("T_OrderInfo", doc, sort, CurrentPage, PageSize);
foreach (var data in DataList)
{
if (data.OrderID == Guid.Empty)
{
break;
}
//防止匹配以后再次匹配
if(result.Select(x => x.OrderID).Contains(data.OrderID))
{
continue;
}
//var ActiveTimeDC = new Document();
var OriginPointDC = new Document();
var TerminalPointDC = new Document();
//起点匹配
OriginPointDC.Add("ActiveTime", new Document("$gt", data.ActiveTime.AddMinutes(-30)).Add("$lt", data.ActiveTime.AddMinutes(30)));
OriginPointDC.Add("IsDelete", false);
OriginPointDC.Add("OrderID", new Document("$ne", data.OrderID));
OriginPointDC.Add("OriginPoint", new Document("$near", new Document("$geometry", new Document("type", "Point").Add("coordinates", data.OriginPoint.coordinates)).Add("$maxDistance", Range)));
//终点匹配(因为mongodb不能一次匹配两个地理位置,只能一个个匹配,匹配终点,起点,再进一步进行筛选)
TerminalPointDC.Add("ActiveTime", new Document("$gt", data.ActiveTime.AddMinutes(-30)).Add("$lt", data.ActiveTime.AddMinutes(30)));
TerminalPointDC.Add("IsDelete", false);
TerminalPointDC.Add("OrderID", new Document("$ne", data.OrderID));
TerminalPointDC.Add("TerminalPoint", new Document("$near", new Document("$geometry", new Document("type", "Point").Add("coordinates", data.TerminalPoint.coordinates)).Add("$maxDistance", Range)));
List<OrderInfo> ReturnList = MongoHelper.GetList<OrderInfo>("T_OrderInfo", OriginPointDC, 1, 100000000);
List<OrderInfo> ReturnList2 = MongoHelper.GetList<OrderInfo>("T_OrderInfo", OriginPointDC, 1, 100000000);
var isT = false;
foreach (var r in ReturnList)
{
foreach (var r2 in ReturnList2)
{
//必须判断result是否已经存在该数据
if (r.OrderID == r2.OrderID&&!result.Select(x=>x.OrderID).Contains(r.OrderID))
{
data.BatchID = Guid.NewGuid();
r.BatchID = data.BatchID;
result.Add(data);
result.Add(r);
isT = true; break;
}
}
if (isT) break;
}
}
CurrentPage++;
if (DataList.Count() < PageSize)
{
IsBreak = true;
}
}
foreach (var r in result)
{
r.IsDelete = true;
//删除已匹配数据
helper.Update(r, x => x.OrderID == r.OrderID);

T_OrderInfo order = new T_OrderInfo();
order.CreateTime = r.CreateTime;
order.OrderID = r.OrderID;
order.OriginName = r.OriginName;
order.OriginPoint = String.Join(",", r.OriginPoint.coordinates);
order.IsDelete = false;
order.TerminalName = r.TerminalName;
order.TerminalPoint = string.Join(",", r.TerminalPoint.coordinates);
order.UpdateTime = r.UpdateTime;
order.UserID = r.UserID;
order.ActiveTime = r.ActiveTime;
order.BatchID = r.BatchID;
entity.T_OrderInfo.Add(order);
}
entity.SaveChanges();
}
}
}


View Code
==========================

Mongodb中查询Guid数据

Net中Guid传到Mongodb中变成LUUID

js查询1:

function LUUID(uuid) {
var hex = uuid.replace(/[{}-]/g, ""); // removes extra characters
return new UUID(hex); //creates new UUID
}
db.getCollection('T_OrderInfo').find({'UserID':LUUID("88460e2a-5eba-454e-b690-9ceb6aa35256")})


查询2:

db.getCollection('T_OrderInfo').find({'UserID':new UUID("88460e2a5eba454eb6909ceb6aa35256")})

http://www.cnblogs.com/huangxincheng/category/355399.html http://www.cnblogs.com/ninestates/p/4738328.html http://www.oschina.net/code/snippet_1387007_46081 http://chenzhou123520.iteye.com/blog/1637629
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: