這兩天在研究mongoDB,從零開始接觸它,爲何要研究它呢,由於它支持2d地圖索引,並且速度很是快,能夠用它來作相似微信的(搖一搖功能),不過網上很難搜到.net操做的,並且就算搜索到了也不能用,也許是驅動版本的問題。總之處處都找不到可用的代碼,只好本身慢慢研究調試,終於成功查詢到了附近的數據了。mongodb
我用的驅動版本是最新的,CSharpDriver-1.7.0.4714版本,在項目中引用相應驅動json
MongoDB.Driver微信
MongoDB.Bsondom
定義全局變量
Random rd = new Random();.net
string dbname = "test";
string cstr = "mongodb://127.0.0.1:27017";調試
新建兩個內部類a1是咱們的數據對象,loc是咱們的2d位置座標server
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字符串ip
/// <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); ;
而後,咱們發現附近的數據被咱們查詢到了!