Mongo go driver的DocumentCount不支持$nearSphere
Mongo go driver's DocumentCount does not support $nearSphere
我正在处理地理位置查询,我想获得满足地理位置查询的集合总数。 Mongo go 库提供文档计数方法,不支持基于地理位置的筛选。
我得到的错误是:
(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)
(BadValue) $geoNear, $near, and $nearSphere are not allowed in this context
由于 db.collection.countDocuments() 的使用受限,您收到此消息。
方法 countDocuments()
本质上包装了聚合管道 $match
和 $group
。请参阅 The Mechanics of countDocuments() for more information. There are a number of query operators that are restricted : Query Restrictions, one of them being $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 在 没有 地理空间索引的情况下也能正常工作,但地理空间索引支持的查询比未索引的等效项快得多。
我正在处理地理位置查询,我想获得满足地理位置查询的集合总数。 Mongo go 库提供文档计数方法,不支持基于地理位置的筛选。
我得到的错误是: (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)
(BadValue) $geoNear, $near, and $nearSphere are not allowed in this context
由于 db.collection.countDocuments() 的使用受限,您收到此消息。
方法 countDocuments()
本质上包装了聚合管道 $match
和 $group
。请参阅 The Mechanics of countDocuments() for more information. There are a number of query operators that are restricted : Query Restrictions, one of them being $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 在 没有 地理空间索引的情况下也能正常工作,但地理空间索引支持的查询比未索引的等效项快得多。