我有一个包含356个文档的集合(用户),并且在字段地理数据上具有索引“ 2dsphere”。 120个文档的地理数据字段为:{type:“ Point”,坐标:[X,Y]},其中X和Y是德国境内的坐标。
如果我执行以下聚合:
db.users.aggregate(
[
{
"$geoNear":{
near: { type: "Point", coordinates: [48.783469, 9.181842] },
distanceField: "distanceCalculated",
spherical: true
}
},
{
"$sort":{"distanceCalculated":1}
}
]
)
我得到46个结果,但是据我了解,我应该至少得到100个(极限参数的标准值) 如我所见,所有结果都在〜210公里范围内,是否有未记录的标准maxDistance?我还尝试了不同的maxDistance值,但从未获得超过48个结果。
我的问题是,我该怎么做才能使所有(120)个结果按距离排序?
答案 0 :(得分:0)
发现了陷阱: 所有(120)个文档的geodata.coordinates类型设置为object而不是array。不幸的是,我不能说为什么mongoDB仍然返回一些结果而不是null。我使用以下命令转换了所有条目,现在可以使用了:
db.users.find({ "geodata": { $exists: true, $ne: null }}).forEach((user)=> {
var coordinates = user.geodata.coordinates;
user.geodata.coordinates = [coordinates["0"], coordinates["1"]];
db.users.save(user);
});