地理元素必须是数组或对象:类型:“点”
Posted
技术标签:
【中文标题】地理元素必须是数组或对象:类型:“点”【英文标题】:geo element must be an array or object: type: "Point" 【发布时间】:2019-02-09 02:30:59 【问题描述】:当我尝试这样的发布请求时
" "imgUrl": "Server\Pictures\i14182109167", "text": "我自己在 首尔”,“标签”:[“首尔”,“旅游”],“几何”:“类型”:“点”,“坐标”:[80, -27] "
错误原因
'无法提取地理键: _id: ObjectId(\'5b8e204455526366f86a6383\'),标签:[“首尔”,“旅游”], 日期:新日期(1536041028423),imgUrl: “服务器\图片\i14182109167”,文本:“我自己在首尔”,几何: 类型:“点”,坐标:[80,-27],_id: ObjectId(\'5b8e204455526366f86a6384\') , __v: 0 地理元素必须 是一个数组或对象:类型:“Point”'
即使我在帖子请求中添加了 "type": "Point" 但是,为什么?
const geoSchema = new Schema(
type:
type: String,
default: 'Point',
index: '2dsphere'
,
coordinates:
type: [Number]
);
const memoSchema = new Schema(
imgUrl:
type: String
,
text:
type: String
,
date:
type: Date,
default: Date.now
,
tag:
type: [String]
,
user:
type: Schema.Types.ObjectId,
ref: 'Memo'
,
geometry: geoSchema
)
【问题讨论】:
【参考方案1】:我将几何图形更改为 loc 它起作用了! 但是,我不知道为什么...
【讨论】:
这是因为 loc 不是地理索引。您可以将其更改为可以使用的任何内容。但它不会被索引【参考方案2】:我遇到了这个错误,尝试了几个模式声明,直到 我通过这个实现这个设计解决了:
1。创建一个具有 Point 作为属性的新架构。
const mongoose = require('mongoose');
const Point = require('mongoose-geojson-schema');
const pointSchema = new mongoose.Schema(
type:
type: String,
enum: ['Point'],
required: true
,
coordinates:
type: [Number],
required: true
);
2。包含上述属性的对象架构:
const itemsSchema = new mongoose.Schema(
description:
type: String,
required: true
,
location:
type: pointSchema,
required: true
)
const Item = mongoose.model('Item', ItemsSchema);
module.exports = Item;
enter code here
3。最后,我的控制器成功像这样实例化对象:
var geolocation =
type: 'Point',
coordinates: [
lng,
lat
]
;
const item = new Item(
description: req.body.description,
location: geolocation
)
希望对您有所帮助。
【讨论】:
已经遵循了这个,仍然是同样的错误:地理元素必须是一个数组或对象:类型:“点”以上是关于地理元素必须是数组或对象:类型:“点”的主要内容,如果未能解决你的问题,请参考以下文章
c语言中,定义数组和引用数组时,其数组的下标的数据类型分别允许是啥?
C ++中的“表达式必须具有指向对象类型”和“下标需要数组或指针类型”是啥意思?