我正在研究地理位置查询,我想获得满足地理位置查询的集合总数。 Mongo go库提供的Document Count方法不支持基于地理位置的过滤器。
我得到的错误是: (BadValue)在此情况下不允许使用$ geoNear,$ near和$ nearSphere
filter := bson.D{
{
Key: "address.location",
Value: bson.D{
{
Key: "$nearSphere",
Value: bson.D{
{
Key: "$geometry",
Value: bson.D{
{
Key: "type",
Value: "Point",
},
{
Key: "coordinates",
Value: bson.A{query.Longitude, query.Latitude},
},
},
},
{
Key: "$maxDistance",
Value: maxDistance,
},
},
},
},
},
}
collection := db.Database("catalog").Collection("restaurant")
totalCount, findError := collection.CountDocuments(ctx, filter)
答案 0 :(得分:0)
(BadValue)在这种情况下不允许使用$ geoNear,$ near和$ nearSphere
由于db.collection.countDocuments()的限制使用,您收到此消息。
方法countDocuments()
本质上包装了聚合管道$match
和$group
。有关更多信息,请参见The Mechanics of countDocuments()。有许多受限制的查询运算符:Query Restrictions,其中一个是$nearSphere运算符。
另一种方法是使用[$ geoWithin]和$centerSphere:
filter := bson.D{
{ Key: "address.location",
Value: bson.D{
{ Key: "$geoWithin",
Value: bson.D{
{ Key: "$centerSphere",
Value: bson.A{
bson.A{ query.Longitude, query.Latitude } ,
maxDistance},
},
},
},
},
}}
请注意,球形几何体中的maxDistance
必须在半径内。您需要转换距离,例如10/6378.1
代表10公里,请参阅Calculate Distance using Spherical Geometry了解更多信息。
还值得一提的是,尽管$centerSphere在没有的情况下没有地理空间索引,但是地理空间索引比未索引的等效索引支持的查询要快得多。