Mongo db/C# - 如何进行边界框查询?

Yan*_*nis 2 c# mongodb nosql mongodb-.net-driver

每个标题 - 我正在使用官方的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)
{
} 
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用.我明白了:

QueryFailure标志在类型中是未知$:0(响应是{"$ err":"未知$在类型中:0","代码":13058}).

Ram*_*Vel 7

您的代码中的问题是您没有指定要使用的地理操作.你只是指定$within但错过了where.您必须$within$box(边界框)$polygon,$center$centerSphere/ 一起指定$nearSphere.

这是运行$box查询的正确mongo语法

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

我不确定c#mongodb语法.但是,如果你包含'$ box',它将会起作用