这两天在研究mongoDB,从零开始接触它,为什么要研究它呢,因为它支持2d地图索引,而且速度非常快,可以用它来做类似微信的(摇一摇功能),不过网上很难搜到.net操作的,而且就算搜索到了也不能用,也许是驱动版本的问题。总之到处都找不到可用的代码,只好自己慢慢研究调试,终于成功查询到了附近的数据了。

我用的驱动版本是最新的,CSharpDriver-1.7.0.4714版本,在项目中引用相应驱动

MongoDB.Driver

MongoDB.Bson

定义全局变量
Random rd = new Random();

string dbname = "test";
 string cstr = "mongodb://127.0.0.1:27017";

新建两个内部类a1是我们的数据对象,loc是我们的2d位置坐标

public class a1 
        {
            public MongoDB.Bson.ObjectId _id { get; set; }
            public string T1 { get; set; }
            public string T2 { get; set; }
            public loc lo { get; set; }
            
        }
        public class loc 
        {
            public float lat { get; set; }
            public float lon { get; set; }
            public loc(float la, float lo)
            {
                lat = la;
                lon = lo;
            }

首先,自动生成50个随机坐标的数据

for (int i = 0; i < 100; i++)
            {
                a1 a = new a1();
                a.T1 = "DDDD";
                a.T2 = "DTTT";
                a.lo = new loc((float)rd.Next(90) + 3, (float)rd.Next(90) + 3);
                MongoDB.Driver.MongoServer server = MongoDB.Driver.MongoServer.Create(cstr);

MongoDB.Driver.MongoDatabase db = server.GetDatabase(dbname);
                MongoDB.Driver.MongoCollection col = db.GetCollection("user");
                col.Insert<a1>(a);
            }
            public loc()
            {
                // TODO: Complete member initialization
            }
        }

转化对象为json字符串

/// <summary>
        /// 生成Json格式
        /// </summary>
        /// <typeparam name="T">传入的类型</typeparam>
        /// <param name="obj">传入的数据</param>
        /// <returns>生成的json字符串</returns>
        public static string GetJson<T>(T obj)
        {
            JavaScriptSerializer jss = new JavaScriptSerializer();
            return jss.Serialize(obj);
        }

查找距离指定位置最近的20条数据

MongoDB.Driver.MongoServer server = MongoDB.Driver.MongoServer.Create(cstr);

MongoDB.Driver.MongoDatabase db = server.GetDatabase(dbname);
            MongoDB.Driver.MongoCollection col = db.GetCollection("user");
            col.CreateIndex("lo","2d");//创建2d索引
            var query = new MongoDB.Driver.QueryDocument { {"T1","DDDD"} };
      
      
           var re4 = col.GeoNearAs<a1>(query, 10.0, 10.0, 20);
           var t = re4.Hits;
           List<object> list = new List<object>();
           for (int i = 0; i < t.Count; i++)
           {
               var b = t.ElementAt(i);
               list.Add(b.Document);
           }
           richTextBox4.Text = GetJson<List<object>>(list); ;

然后,我们发现附近的数据被我们查询到了!

最新文章

  1. python 中的metaclass和baseclasses
  2. HL7 2.6解析转XML(C#版)
  3. C#面向对象编程进阶(一) ——实现栈
  4. ASP.net知识点
  5. 《Code Complete》ch.7 高质量的子程序
  6. java计算两个日期之间相隔的天数
  7. SEO 外链 内链 的定义
  8. HttpSession具体解释
  9. android 中判断WiFi是否可用的可靠方法 ,android 是否联网
  10. Redis常用命令总结
  11. QQ设置手机和pc qq群消息不同步
  12. find用法详解
  13. opencv计算两个轮廓之间hu矩相似程度,MatchShapes
  14. Srt字幕文件解析
  15. Android开发常见错误汇总
  16. NT1_keras下搭建一个3层模型并且修改。
  17. POJ1159
  18. vue开发 - 将方法绑定到window对象,给app端调用
  19. VBA 语句集400句
  20. 当array_filter函数的callback留空时 他会过滤掉所有键值为false的键

热门文章

  1. JS高阶编程技巧--compose函数
  2. Android中使用SeekBar拖动条实现改变图片透明度
  3. 关于mac下redis的安装和部署
  4. 2020年如何成为一个高级AVA架构师(50W~100W年薪)
  5. Ajax工作原理及优缺点
  6. sqlserver 批量修改数据库表主键名称为PK_表名
  7. 安装PHP到Ubuntu(APT)
  8. open Live Writer 代码插件安装
  9. python3-cookbook笔记:第五章 文件与IO
  10. 安装MYSQL到Ubuntu(APT)