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不多介绍.让我介绍不如看官网,我这里就是直接上源代码,当然代码还是写的比较简单的,考虑的也少,希望各位技友多多提意见. 先简单介绍聊天室功能: 用户加入聊天室,自动给用户 ...
随机推荐
- java并发编程(八)多线程环境下安全使用集合
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17200509 在集合API中,最初设计的Vector和Hashtable是多线程安 ...
- Lua面向对象
lua中的table就是一种对象,但是如果直接使用仍然会存在大量的问题,如下: 1 Account = {balance = 0}2 function Account.withdraw(v)3 Acc ...
- Android 四大护法之一 Service
1.Service的概念 Service是Android 四大组件之一,是默认没有界面的运行于后台的服务程序.Service的开启方式分为启动式服务(startService)和绑定式服务(bindS ...
- HTML基础篇之HTML基本元素
<h1>标题一</h1> <h2>标题二</h2> <h3>标题三</h3> <h4>标题四</h4> ...
- CSS3的高级特性
CSS3对响应式设计非常有用:使用CSS3替代图片,在有带宽限制的网页中可有效减少http请求(从而使网页加载更快),并可使网页更灵活.更容易维护. 在开发CSS3时,要记住添加相关的浏览器私有前缀以 ...
- mycat的读写分离设置
官网:http://www.mycat.org.cn/ 一.jdk环境的安装1.安装jdk1.7,这是mycat推荐的jdk环境 2.之前是用yum安装的jdk1.6,首先查找下 #yum info ...
- php5.6 一键编译
1. 替换成aliyun的源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup wget -O ...
- JSON与String 格式的转换
JSON 可以用 .push() 添加新数据 var json =[ { title:"1",content:"Tom" }, { title:"2& ...
- win7+vs2008+windows mobile6.5.3
1.安装vs2008+vs2008sp12.安装Windows Mobile 6 Professional SDK Refresh.msi3.安装Windows Mobile 6 Profession ...
- linux权限系统
Linux权限分为 r(4):可读 , w(2)可写 , x(1)可执行 , -无权限 , 可以通过ls -l 文件名查看权限 , 如 ls -l 文件名 输出: -rwxrw---x. root r ...