mongodb - 使用 $geoNear 在使用 maxDistance 时给出 "geo near accepts just one argument when querying for a GeoJSON point"
mongodb - using $geoNear gives "geo near accepts just one argument when querying for a GeoJSON point" when using maxDistance
这似乎是一个常见错误,但我似乎无法使其适用于我所看到的所有建议。这是我的设置:
// point.js (based on mongoose recommended subdocument pattern for reusing the GeoJSON definition
// see here https://mongoosejs.com/docs/geojson.html)
const mongoose = require('mongoose');
const pointSchema = new mongoose.Schema({
type: {
type: String,
enum: ['Point'],
required: true
},
coordinates: {
type: [Number],
required: true,
}
});
exports = pointSchema;
// user.js
var schema = new Schema({
location: {
type: pointSchema,
},
...
});
schema.index({ location: '2dsphere' });
var User = mongoose.model('User', schema);
// routeHandler.js
const near = { type: 'Point', coordinates: [lng, lat] };
User.aggregate([
{ $geoNear: {
near,
distanceField: 'dist',
maxDistance: 100000,
spherical: true,
} },
...
]).exec((err, results) => {
console.log('error or results:', err, results);
});
我得到这个错误:
MongoError: Failed to determine whether query system can provide a covered projection :: caused by :: geo near
accepts just one argument when querying for a GeoJSON point. Extra field found: $maxDistance: 100000.0
我看到的大多数线程都表明这是索引问题,但您可以在 user.js
中看到我直接调用
schema.index({ location: '2dsphere' });
运气不好。
非常感谢任何建议,谢谢!
我遇到了同样的问题并经历了许多解决方案,但其中任何一个都没有像
真正的问题出在数据中。
在我的模型中有正确的 2dsphere 索引,但是当使用 2dshpere 时 数据库中的位置应该采用位置格式:[ lng, lat ] 这是主要问题。 因为 mongodb 不验证此格式的位置数组。
验证数据库中的数据和查询时指定的点都应该是正确的格式。
希望对大家有所帮助!
我也遇到了同样的错误,经过大量研究后我发现 运行 聚合查询。我将坐标作为字符串数组传递,它应该是数字数组。
{
$geoNear: {
near: {
type: "Point",
coordinates: [103.83797, 1.46103],
},
distanceField: "dist.calculated",
maxDistance: distance,
includeLocs: "dist.location",
spherical: true,
},
},
这似乎是一个常见错误,但我似乎无法使其适用于我所看到的所有建议。这是我的设置:
// point.js (based on mongoose recommended subdocument pattern for reusing the GeoJSON definition
// see here https://mongoosejs.com/docs/geojson.html)
const mongoose = require('mongoose');
const pointSchema = new mongoose.Schema({
type: {
type: String,
enum: ['Point'],
required: true
},
coordinates: {
type: [Number],
required: true,
}
});
exports = pointSchema;
// user.js
var schema = new Schema({
location: {
type: pointSchema,
},
...
});
schema.index({ location: '2dsphere' });
var User = mongoose.model('User', schema);
// routeHandler.js
const near = { type: 'Point', coordinates: [lng, lat] };
User.aggregate([
{ $geoNear: {
near,
distanceField: 'dist',
maxDistance: 100000,
spherical: true,
} },
...
]).exec((err, results) => {
console.log('error or results:', err, results);
});
我得到这个错误:
MongoError: Failed to determine whether query system can provide a covered projection :: caused by :: geo near accepts just one argument when querying for a GeoJSON point. Extra field found: $maxDistance: 100000.0
我看到的大多数线程都表明这是索引问题,但您可以在 user.js
中看到我直接调用
schema.index({ location: '2dsphere' });
运气不好。
非常感谢任何建议,谢谢!
我遇到了同样的问题并经历了许多解决方案,但其中任何一个都没有像 真正的问题出在数据中。
在我的模型中有正确的 2dsphere 索引,但是当使用 2dshpere 时 数据库中的位置应该采用位置格式:[ lng, lat ] 这是主要问题。 因为 mongodb 不验证此格式的位置数组。
验证数据库中的数据和查询时指定的点都应该是正确的格式。
希望对大家有所帮助!
我也遇到了同样的错误,经过大量研究后我发现 运行 聚合查询。我将坐标作为字符串数组传递,它应该是数字数组。
{
$geoNear: {
near: {
type: "Point",
coordinates: [103.83797, 1.46103],
},
distanceField: "dist.calculated",
maxDistance: distance,
includeLocs: "dist.location",
spherical: true,
},
},