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. Hadoop openssl false

    错误如图 检查Hadoop native 经过: 1. 重新编译cdh的hadoop2.5.0,复制native 2. 重新格式化namenode 都不行,另外openssl和openssl-dev都 ...

  2. Html简单介绍

    一.Html 1.万维网的核心语言,高大上称之为超文本标记语言(Html)的第五次修改 2.完成的时间:2014年10月29日 3.我们需要了解有一定高度的知识: WHATWG  WEB超文本应用技术 ...

  3. 【整理】深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件

    在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法.在有等式约束时使用拉格朗日乘子法,在有不等约束时使用 ...

  4. Vue.js起手式+Vue小作品实战

    本文是小羊根据Vue.js文档进行解读的第一篇文章,主要内容涵盖Vue.js的基础部分的知识的,文章顺序基本按照官方文档的顺序,每个知识点现附上代码,然后根据代码给予个人的一些理解,最后还放上在线编辑 ...

  5. ansible-copy

    ansible是执行yaml文件控制远端服务器.执行命令为 ansible-playbook my.yamlplaybook是ansible中的脚本,采用yaml语言.VM1安装ansible,ip地 ...

  6. JavaScript slice() 方法

    JavaScript slice() 方法  JavaScript Array 对象 实例 在数组中读取元素: var fruits = ["Banana", "Oran ...

  7. 2在HTML中使用JavaScript

    像HTML页面中插入JavaScrip的主要方法,就是使用<script>元素.HTML4.01为<script>定义了6个属性:async:可选,表示应该立即下载脚本,当不妨 ...

  8. C# 构造post参数一种看起来直观点的方法[转]

    因为本人经常爱用C#做一些爬虫类的小东西,每次构造post参数的时候,都是直接字符串拼接的方式的,有时候改起来不太方便. 场景: 需要post一个地址 参数列表 : username:管理员 pass ...

  9. Linux下查看某进程相关进程

    1- ps -T <pid> ###pid表示进程号 或者ps -T -p <pid> 2-   top -H -p <pid>  ###pid表示进程号 3-  ...

  10. cocos2dx 3.x(获得父类的node型指针调用父类函数this->getParent())

    void CenterLayer::zhanzheng(CCObject* pSender){ ((GameScene*)this->getParent())->showLayer(Gam ...