Mongoose GeoJSON 在使用中间件时抛出“MongoError:无法提取地理键”
Posted
技术标签:
【中文标题】Mongoose GeoJSON 在使用中间件时抛出“MongoError:无法提取地理键”【英文标题】:Mongoose GeoJSON throws "MongoError: Can't extract geo keys" when using middleware 【发布时间】:2020-07-31 04:08:24 【问题描述】:我在我的 NodeJS 项目中使用 Mongoose,并且我在子文档数组中有一个 GeoJSON 对象:
ParentSchema.js
import mongoose from 'mongoose';
import ChildeSchema from '[path]/ChildSchema.js';
const ParentSchema = mongoose.Schema(
...
children: [ChildSchema],
...
);
ChildSchema.js
import mongoose from 'mongoose';
import geocoder from '[path]/geocoder.js'; // where I initialize the geocoder
const ChildSchema = mongoose.Schema(
...
location:
// GeoJSON
type:
type: String,
enum: ['Point'],
default: 'Point'
,
// first enter longitude, then latitude
coordinates:
type: [Number]
//index: '2dsphere' <-- committed out, also tried with the index
,
...
);
// middleware goes here
export default ChildSchema;
我在ChildSchema
中添加了一个中间件,它使用与mapquest 配合使用的geocoder
获取位置信息。
中间件(在 ChildSchema.js 中):
ChildScheme.pre('save', async function (next)
const geoDetails = await geocoder.geocode(this.fullAddress); // works fine, I'm getting the location
// values are legal
const latitude = geoDetails[0].latitude;
const longitude = geoDetails[0].longitude;
this.location =
type: 'Point',
coordinates: [longitude, latitude]
;
next();
当我尝试创建一个新的父文档(使用带有 application/json Content-Type 的 POST)时,我收到以下错误:
MongoError: 无法提取地理键:the_parent_document 地理元素必须是数组或对象:类型:\"Point\"
我尝试应用在以下问题中找到的答案,但没有帮助:mongoose geojson in schema, “Can't extract geo keys” errorMongoError: Can't extract geo keysMongoose Schema for geoJson coordinatesHow does one represent MongoDB GeoJSON fields in a Mongoose Schema?@987654325 @
我错过了什么?提前感谢您的回答!
【问题讨论】:
【参考方案1】:将密钥的名称更改为 location
以外的其他名称,并且有效...
【讨论】:
以上是关于Mongoose GeoJSON 在使用中间件时抛出“MongoError:无法提取地理键”的主要内容,如果未能解决你的问题,请参考以下文章
尝试将变量保存到 GeoJSON 点时出现 Mongoose CastError
Mongoose 在使用 .save() 方法更新文档时抛出 E11000 重复键错误
如何在 MongoDB 中正确使用 $geoIntersects?