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. Django URL name详解

    我们基于上一节的代码来开始这一节的内容. 上节源代码:zqxt_views(django 1.4 - django 1.10).zip [更新于 2016-09-06 00:13:23] 1. 打开 ...

  2. 2016huasacm暑假集训训练四 递推_A

    题目链接:http://acm.hust.edu.cn/vjudge/contest/125308#problem/A 这题主要考的就是就是一个排列公式,但是不能用阶乘的公式,    用这个公式不易超 ...

  3. Yii源码阅读笔记(三十三)

    ServiceLocator,服务定位类,用于yii2中的依赖注入,通过以ID为索引的方式缓存服务或则组件的实例来定位服务或者组件: namespace yii\di; use Yii; use Cl ...

  4. Eclipse修改编码格式

    ♣修改工作空间默认编码 ♣修改文件的编码 ♣修改某文件类型的编码 ♣修改JSP文件类型的编码 1.修改工作空间默认编码 window -> preferences ->  General ...

  5. java swing文件内容检索工具

    Java相关技术 - 文件内容检索工具 拿到一个几百M甚至上G的project让你去学习 有时候你会想知道某个关键词是在哪个文件里 比如:spring MVC配置的@RequestMapping,你从 ...

  6. InnoDB杂记

    一.InnoDB写数据流程(猜想) myisam是将索引放入内存缓存(Key Cache,大小有key_buffer_size设置) innodb时间索引和数据文件都放入内存缓存池(Buffer Po ...

  7. C++ 用RGB 三种颜色绘图

    #include <iostream> #include <cmath> #include <cstdlib> #define DIM 1024 #define D ...

  8. get back to the slower clock rate that allows it to save more power

    http://www.howtogeek.com/177790/why-you-cant-use-cpu-clock-speed-to-compare-computer-performance/ Wh ...

  9. jqxComboBox

    var uptype_source = [{ "TYPE_DESC": "总额度", " }, { "TYPE_DESC": &q ...

  10. vs2015企业版和专业版秘钥

    专业版:HMGNV-WCYXV-X7G9W-YCX63-B98R2企业版:HM6NR-QXX7C-DFW2Y-8B82K-WTYJV 来自http://www.cnblogs.com/xuhongfe ...