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实例的更多相关文章

  1. ASP.NET导出word实例

    ASP.NET导出word实例 最近遇到一个题目就是如何在asp.net中将数据导出到word中,由于数据是动态的,所以需要在后台拼出想要的的格式,翻遍了网页找出了一个比较满意的代码,感谢那位高手.代 ...

  2. 单台MongoDB实例开启Oplog

    背景 随着数据的积累,MongoDB中的数据量越来越大,数据分析团队从数据库中抽取变化数据(假如依据栏位createdatetime,transdatetime),越来越困难.我们知道MongoDB的 ...

  3. ASP.NET WebForm & MongoDB

    ASP.NET WebForm & MongoDB 最近在朋友介绍下,也跟着看AngularJS 买了一本三合一的书,Node.JS+MongoDB+AngularJS http://www. ...

  4. MongoDB实例重启失败探究(大事务Redo导致)

    1.实例重启背景 收到监控组同学反馈,连接某一个MongoDB实例的应用耗时异常,并且出现了超时.查看数据库监控平台,发现此实例服务器的IO异常飙升,而查看副本集状态(rs.status()),主从是 ...

  5. ASP.NET Ajax 简单实例

    本实例讲解Ajax 调用WCF服务. 1.建立一个网站,并在其中添加一个WCF服务(这里需要选择Ajax-Enabled WCF Service). 2.IDE会自动生成一个SVC文件. 3.服务代码 ...

  6. asp.net 使用 MongoDB 初体验

    首先:驱动 如果asp.net 想使用MongoDB,.net没有自带的链接类.得用第三方或官方的链接类. 当然有很多种驱动,我就不一一介绍了. 今天我就介绍一个我比较常用的驱动-----MongoD ...

  7. ASP连接sql server实例解析

    1.首先确定自己的iis没有问题 2.其次确定自己sqlserver没有问题 然后在iis的文件夹wwwroot里,建立一个文件 名为testSqlServer.asp,编写代码例如以下就可以 < ...

  8. (转)ASP连接sql server实例解析

    本文转载自:http://blog.csdn.net/xys_777/article/details/5696276 1.首先确定自己的iis没有问题 2.其次确定自己sqlserver没有问题 然后 ...

  9. ASP.NET SingalR + MongoDB 实现简单聊天室(一):搭建基本框架

    ASP.NET SingalR不多介绍.让我介绍不如看官网,我这里就是直接上源代码,当然代码还是写的比较简单的,考虑的也少,希望各位技友多多提意见. 先简单介绍聊天室功能: 用户加入聊天室,自动给用户 ...

随机推荐

  1. TranslateAnimation参数

    看TranslateAnimation动画参数,一直忘记四个参数意思: public    TranslateAnimation(float fromXDelta, float toXDelta, f ...

  2. java并发编程(三)线程挂起,恢复和终止的正确方法

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17095733    下面我们给出不用上述两个方法来实现线程挂起和恢复的策略--设置标志位. ...

  3. 201301 JAVA题目0-1级

    描述 编写一个函数,传入一个int型数组,返回该数组能否分成两组,使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),能满足以上条件,返回 ...

  4. Mac 系统环境变量配置

    Mac 系统环境变量配置 例如这里要配置一下 QUICK_V3_ROOT 的环境变量 1.打开终端 输入  vim ~/.bash_profile 2.一直回车 知道出现以下选项 按 E 编辑     ...

  5. svn bug

    Error:Can't find temporary directory:internal error 原因:服务器端,磁盘满了 repository and is not part of the c ...

  6. 怎么使用CKEDITOR

    出于工作需求,自己在网上找了个文本编辑器控件, 网址是http://ckeditor.com/ 怎么使用? 先插入脚本<script type="text/javascript&quo ...

  7. poj2389-Bull Math(大整数乘法)

    一,题意: 大整数乘法模板题二,思路: 1,模拟乘法(注意"逢十进一") 2,倒序输出(注意首位0不输出) 三,步骤: 如:555 x 35 = 19425  5 5 5  5 5 ...

  8. 关于BeanUiles.copyPropertis()的用法

    最近的项目遇到BeanUiles.copyPropertis(),大大的简化了代码量.用hibernate从数据库中映射的实体类,与pojo对象进行转换,传统做法 Object obj = baseD ...

  9. linux的sysctl基本配置

    # Controls the use of TCP syncookiesnet.ipv4.tcp_syncookies = 1 # me write paramnet.ipv4.tcp_timesta ...

  10. tp文件上传;org/RBAC.class.php 权限类;think/page,class,php分页类;

    一.上传表单: 注意,要使用上传功能 你的表单需要设置 enctype="multipart/form-data" <form action="__URL__/up ...