2012-02-09 51 views
2

每題 - 我使用的是官方的mongodb驅動程序,我正在尋找在給定邊界框內的所有POI。Mongo db/C# - 如何做邊界框查詢?

到目前爲止,我有:

MongoCollection<BsonDocument> collection = _MongoDatabase.GetCollection("pois"); 

BsonArray lowerLeftDoc = new BsonArray(new[] { lowerLeft.Lon, lowerLeft.Lat}); 
BsonArray upperRightDoc = new BsonArray(new[] { upperRight.Lon, upperRight.Lat}); 

BsonDocument locDoc = new BsonDocument 
{ 
    { "$within", new BsonArray(new[] { lowerLeftDoc, upperRightDoc})} 
}; 

BsonDocument queryDoc = new BsonDocument { { "loc", locDoc }}; 

IList<TrafficUpdate> updates = new List<TrafficUpdate>(); 
var results = collection.Find(new QueryDocument(queryDoc)).SetLimit(limit); 
foreach (BsonDocument t in results) 
{ 
} 

可惜的是,這並不工作。我得到:

QueryFailure標誌是類型中未知$:0(迴應是{ 「$ ERR」: 「類型中未知$:0」, 「密碼」:13058})。

回答

7

您代碼中的問題是您沒有指定要使用的地理操作。您只指定$within,但錯過了where。您必須指定$within以及$box(包圍盒),$polygon$center$centerSphere/$nearSphere

這是正確的蒙戈語法運行$box查詢

> box = [[40.73083, -73.99756], [40.741404, -73.988135]] 
> db.places.find({"loc" : {"$within" : {"$box" : box}}}) 

我不知道關於C#語法的mongodb。但是,如果你有「$盒子」,它會工作

+0

謝謝隊友 - 我開始覺得司機不支持這個! – Yannis 2012-02-09 18:37:20

+0

@Yannis,你試過這個嗎?'BsonDocument locDoc = new BsonDocument {「$ within」,{「$ box」,new BsonArray(new [] {lowerLeftDoc,upperRightDoc})}}' }; – RameshVel 2012-02-09 18:45:13

+0

或者你也可以試試mongodb-csharp官方論壇http://groups.google.com/group/mongodb-csharp .. – RameshVel 2012-02-09 18:46:01

4

你可以同時使用查詢生成器此查詢:

var query = Query.Within("loc", lowerLeft.Lon, lowerLeft.Lat, 
    upperRight.Lon, upperRight.Lat); 

,並讓有關正確格式的創建的細節問題的詳細信息查詢生成器憂查詢。