asp.net的mongodb实例
mongodb为2.6版本,
.net是4.0,
c#接口时1.7。
运行环境为windows8 with visual studio2010
注意事项:在mongodb中使用地理位置存储信息且动用到范围查询的请先将其地理信息以数组的形式建立数据集(c#代码:double[] location{double latitude=*.*f,double longitude=*.*f})否则无法建立2d地理位置索引,然后在monggodb的collection(关系型数据库中的’表‘)中将此地理位置建立2d索引。网上有人表示建立此索引必须用户亲自操作数据库,不能使用.net中的collection.createIndex()或其他建立索引的接口。另外,很多人在c#中收集信息的类成员使用get{}set{}方法,在这里请务必小心大小写,代码的第40行中已注明。在做数据查询时写BsonDocument或query时一定要注意大小写因为mongodb区分大小写
操作实例:
1)连接数据库(nearby)
2)打开对应的collection
3)collection.createIndex()//这个是命令行或终端的方式(伪代码,详情请查询mongodb官方文档)
注:图形界面的话可以推荐两个软件:
--1)mongo vue (mongovue是Windows操作系统,给你一个优雅的、高度可用的GUI界面与MongoDB MongoDB桌面应用的创新。现在有一个不太担心管理您的网络规模数据。http://www.mongovue.com/ )
--2)umongo(UMongo (前身是 JMongoBrowser) 是一个图形化界面的工具,用来浏览和管理 MongoDB 集群,支持 Linux, Windows 和 Mac OSX.)
注:命令行或终端可以根据链接中的文档进行操作:http://docs.mongodb.org/manual/reference/method/
c#接口的官方文档:http://api.mongodb.org/csharp/current/html/R_Project_CSharpDriverDocs.htm
注:c#接口下载地址:http://www.nuget.org/packages/mongocsharpdriver/
或者在visual studio2012以上的版本使用nuget命令下载到项目中:Install-Package mongocsharpdriver
-----------------------------------------------------
public class MongoNearby
{
private static object objLock = new object();
private static MongoDatabase mongo ; private static MongoDatabase Instance
{
get
{
if (mongo == null)
{
lock (objLock)//防止多线程构造
{
string connctionString = "mongodb://192.168.1.x:27017";
MongoClient client = new MongoClient(connctionString);
MongoServer server = client.GetServer();
mongo = server.GetDatabase("nearby");//数据库
}
}
return mongo;
}
} /// <summary>
/// 保存记录
/// </summary>
/// <param name="info"></param>
/// <returns></returns>
public static bool SaveNearby(NearInfo info)
{
if (info == null)
return false;
try
{//因为在mongodb中主键式objectId,所以在更新数据的话有两种方式:1)查出唯一键对应的主键值然后取出该行在更新,2)删除原有的数据再插入。注意:删除时要注意删除的数据是否符合业务需求(因为这种方式不以主键来删除行纪录)
MongoCollection collection = Instance.GetCollection<NearInfo>("userinfo");
QueryDocument query = new QueryDocument();
query.Add("userid", info.userid);
collection.Remove(query); WriteConcernResult result = collection.Insert(info);
CLog.WriteLog("write: "+info.ToJson());//在插入操作时有必要输出log以备后用或使用mongodb的日志存储
return result.Ok;
}
catch(Exception ex)
{
CLog.WriteLog(ex.Message+info.ToJson());
return false;//在这里应避免使用return,因为这里是数据访问及处理层,业务层调用时可能也使用try{}catch{}结构,所以建议使用throw,因为代码时测使用,所以当时没注意到
}
} /// <summary>
/// 附近用户
/// </summary>
/// <param name="sex">性别</param>
/// <param name="longitude">经度</param>
/// <param name="latitude">纬度</param>
/// <param name="total">总数</param>
/// <param name="limit">限制输出数量</param>
/// <param name="maxDistance">最大半径</param>
/// <returns></returns>
public static List<UserInfo> GetNearbyUser(int myuid,int sex, double longitude, double latitude, ref int total, int limit = , int maxDistance = *)
{
List<UserInfo> list = null;
try
{
list = new List<UserInfo>();
double radius = ;
MongoCollection<NearInfo> collection = Instance.GetCollection<NearInfo>("userinfo"); #region 方法2 计算出了距离
IMongoQuery query = Query.NE("userid",myuid);//查询多行数据时要把自己排除出去
if (sex == || sex == ) {
query =Query.And( Query.NE("sex", -sex),Query.NE("userid",myuid));//业务需求
}
GeoNearOptionsBuilder options = GeoNearOptions.SetMaxDistance(maxDistance * 1.0 / radius).SetSpherical(true).SetDistanceMultiplier(radius);//设置最大半径和输入球体的周长
var result = collection.GeoNear(query, longitude, latitude, limit, options);//如果是查询所有用户,则将query赋值为query.null var response = result.Response;
foreach (var item in response["results"].AsBsonArray)
{
BsonDocument bson = item.AsBsonDocument;
var dis = bson["dis"].AsDouble;//间隔的距离
var obj = bson["obj"].AsBsonDocument;
NearInfo info = BsonSerializer.Deserialize<NearInfo>(obj);
if (info == null)
continue;
/*将反序列的数据赋值到对应的类实例中*/
UserInfo tmp = new UserInfo {
data1 = value1,
data2 = value2,
93 ...
};
list.Add(tmp);
total++;
//CLog.WriteLog(info.sex.ToString());
}
CLog.WriteLog(myuid+"Read: "+result.Response.ToJson());
#endregion
//CLog.WriteLog(list.ToJson());
}
catch (Exception ex){
CLog.WriteLog(ex.Message);//同更新用户的方法一致,使用log并throw异常
}
return list;
}
}
本来不想写那么详细的,考虑到这篇文章并非深入探寻mongodb对于.net的可持久化操作实现,就把能注意的东西填上避免其他人多走弯路了。
引用或转载此文档请务必添加原文链接或地址。谢谢
asp.net的mongodb实例的更多相关文章
- ASP.NET导出word实例
ASP.NET导出word实例 最近遇到一个题目就是如何在asp.net中将数据导出到word中,由于数据是动态的,所以需要在后台拼出想要的的格式,翻遍了网页找出了一个比较满意的代码,感谢那位高手.代 ...
- 单台MongoDB实例开启Oplog
背景 随着数据的积累,MongoDB中的数据量越来越大,数据分析团队从数据库中抽取变化数据(假如依据栏位createdatetime,transdatetime),越来越困难.我们知道MongoDB的 ...
- ASP.NET WebForm & MongoDB
ASP.NET WebForm & MongoDB 最近在朋友介绍下,也跟着看AngularJS 买了一本三合一的书,Node.JS+MongoDB+AngularJS http://www. ...
- MongoDB实例重启失败探究(大事务Redo导致)
1.实例重启背景 收到监控组同学反馈,连接某一个MongoDB实例的应用耗时异常,并且出现了超时.查看数据库监控平台,发现此实例服务器的IO异常飙升,而查看副本集状态(rs.status()),主从是 ...
- ASP.NET Ajax 简单实例
本实例讲解Ajax 调用WCF服务. 1.建立一个网站,并在其中添加一个WCF服务(这里需要选择Ajax-Enabled WCF Service). 2.IDE会自动生成一个SVC文件. 3.服务代码 ...
- asp.net 使用 MongoDB 初体验
首先:驱动 如果asp.net 想使用MongoDB,.net没有自带的链接类.得用第三方或官方的链接类. 当然有很多种驱动,我就不一一介绍了. 今天我就介绍一个我比较常用的驱动-----MongoD ...
- ASP连接sql server实例解析
1.首先确定自己的iis没有问题 2.其次确定自己sqlserver没有问题 然后在iis的文件夹wwwroot里,建立一个文件 名为testSqlServer.asp,编写代码例如以下就可以 < ...
- (转)ASP连接sql server实例解析
本文转载自:http://blog.csdn.net/xys_777/article/details/5696276 1.首先确定自己的iis没有问题 2.其次确定自己sqlserver没有问题 然后 ...
- ASP.NET SingalR + MongoDB 实现简单聊天室(一):搭建基本框架
ASP.NET SingalR不多介绍.让我介绍不如看官网,我这里就是直接上源代码,当然代码还是写的比较简单的,考虑的也少,希望各位技友多多提意见. 先简单介绍聊天室功能: 用户加入聊天室,自动给用户 ...
随机推荐
- Javascript的shift()和push(),unshift()和pop()方法简介
栈方法: Javascript为数组专门提供了push()和pop()方法,以便实现类似栈的行为.来看下面的例子: var colors=new Array(); //创建一个数组 var ...
- IOS网络第二天 - 07-发送JSON给服务器
*************** #import "HMViewController.h" #import "MBProgressHUD+MJ.h" @inter ...
- JavaScript 函数声明,函数表达式,匿名函数,立即执行函数之区别
函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使 ...
- ThinPHP基础
注:约定([书写]规则)胜于配置 *测试连接是否成功:localhost/tp/index.php1.localhost/tp/index.php(入口文件)/Home(模块名)/Index(控制器名 ...
- centos 查看版本(转)
# lsb_release -aLSB Version: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch ...
- Ueditor百度网页编辑器开发者版java utf-8的使用
index.jsp主要代码: <html> <head> <title>网页编辑器</title> <script type="text ...
- orange pi pc 体验(一)
最近在淘宝上看到一款和树莓派差不多的卡片机,定价才99元,而且是国产的,忍不住入手了一个,就是orange pi 感兴趣的可以百度搜索下,深圳一个公司出的,不过资料比树莓派少了很多,论坛中人也没多少, ...
- UWP&WP8.1 重新绘制图片 WriteableBitmap用法 图片转byte[]数组,byte[]数组转图片
---恢复内容开始--- WriteableBitmap 是UWP和WP8.1绘制图片的,重组图片的最重要方法.方法较为简单,方法多样性. 通过查看文档,WriteableBitmap的继承性是 ...
- Python资源大全
The Python Tutorial (Python 2.7.11) 的中文翻译版本.Python Tutorial 为初学 Python 必备官方教程,本教程适用于 Python 2.7.X 系列 ...
- ios cell时间相同隐藏算法