每个标题 - 我正在使用官方的mongodb驱动程序,我希望在给定的边界框内获取所有POI。
到目前为止,我有:
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})。
答案 0 :(得分: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语法。但是,如果你包含&#39; $ box&#39;,它将会工作
答案 1 :(得分:4)
您还可以使用“查询”构建器来执行此查询:
var query = Query.Within("loc", lowerLeft.Lon, lowerLeft.Lat,
upperRight.Lon, upperRight.Lat);
让查询构建器担心创建正确形式的查询的细节。