2012-02-09 10 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) 
{ 
} 

生憎このdoesntの仕事。私が取得する:0(応答して、{ "$のERR": "タイプ内不明$ 0"、 "コード":13058})

QueryFailureフラグは、タイプ内$知られていませんでした。

答えて

7

コードの問題は、使用したいジオ操作を指定しなかったことです。 $withinを指定しただけで、whereが見つかりませんでした。 $box(バウンディングボックス)、$polygon$centerまたは$centerSphere/$nearSphereと一緒に$withinを指定する必要があります。

これは$boxを実行するための正しいMongoの構文は、私はC#のMongoDBの構文についてはよく分からないです

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

を照会しています。

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

を、適切に形成された作成の核心ザラザラの詳細に関するクエリビルダの心配をしてみましょう:あなたは「$ボックス」を含めた場合でも、それはあなたがまた、このクエリのクエリビルダを使用することができ

+0

ありがとうございました - 私はドライバがこれをサポートしていないと思っていました! – Yannis

+0

@Yannis、これを試してみましたか? 'BsonDocument locDoc = new BsonDocument { {" $ within "、{" $ box "、new BsonArray(new [] {lowerLeftDoc、upperRightDoc})}}' }; – RameshVel

+0

またはmongodb-csharp公式フォーラムhttp://groups.google.com/group/mongodb-csharpを試すことができます。 – RameshVel

4

を働くでしょうクエリ。

関連する問題