#node.js #mongodb #mongodb-query #geojson
#node.js #mongodb #mongodb-запрос #geojson
Вопрос:
Существует требование поиска некоторых местоположений в данном регионе. И вот пример моих тестовых данных в mongo:
{
"_id" : "insititution_NPqTrcysjKV",
"phone" : "18080808088",
"name" : "Insititution 1",
"address" : "xxxxxxxxxxxxx",
"city" : "New York",
"location" : {
"type" : "Point",
"coordinates" : [
121.62764,
29.89805
]
},
"includeLessions" : [
"English"
]
}
У меня есть список таких записей в моем mongodb. и вот мой запрос в Robo3T:
db.Insititution.find(
{
location: {
$geoIntersects: {
$geometry: {
type: "Polygon" ,
coordinates: [
[ [ 121.33, 29.899 ], [ 121.33, 29.770 ], [ 121.67, 29.770 ], [ 121.67, 29.899 ], [ 121.33, 29.899 ] ]
]
}
}
}
}
)
Это работает в robo3t, но в моем проекте мне понравилось это:
var where = {
location: {
$geoIntersects: {
$geometry: {
type: "Polygon",
coordinates: [
[longitudeMin, latitudeMin],
[longitudeMin, latitudeMax],
[longitudeMax, latitudeMax],
[longitudeMax, latitudeMin],
[longitudeMin, latitudeMin]
]
}
}
}
}
return promiseUtils.mongoNativeFindPromise(this.modelName, where);
// function in promiseUtils:
exports.mongoNativeFindPromise = async function (modelName, where, options) {
const db = await MongoClient.connect(uri);
try {
let collection = db.db(mongoDBSettings.database);
var cusor = await collection.collection(modelName).find(where, options);
return await cusor.toArray();
} catch (err) {
throw err;
} finally {
db.close();
}
};
и это именно то, на что похожа переменная ‘where’ при запуске кода:
но mongo возвращает ошибку: координаты GeoJSON должны быть массивом
Кто-нибудь может помочь?
Комментарии:
1. Сравните ваш полигон с этим примером: docs.mongodb.com/manual/reference/operator/query/geoIntersects /… Это должно быть
[[ [longitudeMin, latitudeMin], [longitudeMin, latitudeMax], [longitudeMax, latitudeMax], [longitudeMax, latitudeMin], [longitudeMin, latitudeMin] ]]
2. глупый вопрос спасибо за ответ