首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# MongoDB 地理空間索引自定義範圍:修改 system.indexes 集合變通方案

     編輯:程式設計綜合問答

MongoDB 2dsphere/2d 索引默認經緯度範圍 `[-180, 180]`,大地坐標需自定義 `min/max`。C# 官方驅動 `CreateIndex` 當前不直接暴露 `min/max` 選項 (舊版 2d 索引支援),變通方案:直接向 `system.indexes` 集合插入索引定義文檔。

Shell 參考命令

db.places.createIndex({ loc: "2d" }, { min: -500, max: 500 })

C# 實現 (MongoDB.Driver 2.x+)

var db = client.GetDatabase("mydb");
var indexes = db.GetCollection<BsonDocument>("system.indexes");

var indexDoc = new BsonDocument
{
    { "ns", "mydb.places" },
    { "key", new BsonDocument("loc", "2d") },
    { "name", "loc_2d_custom" },
    { "min", -500 },
    { "max", 500 },
    { "v", 2 } // 索引版本
};

indexes.InsertOne(indexDoc); // 直接寫入系統集合創建索引

注意事項

  • 需 **MongoDB 3.2+** 支持 2d 索引自定義範圍;2dsphere (球面) 不支援 min/max。
  • 寫入 `system.indexes` 繞過驅動驗證,屬「非常規手段」,升級驅動/服務端可能失效,需充分測試。
  • 正式項目建議:坐標轉換為標準經緯度 (WGS84) 再用 2dsphere,避免非標準索引維護成本。

驗證

var list = db.GetCollection<BsonDocument>("places").Indexes.List().ToList();
foreach (var idx in list) Console.WriteLine(idx.ToJson());
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved