【发布时间】:2017-01-11 18:12:30
【问题描述】:
我正在尝试使用 Mongoose 将多边形存储到我的 MongoDB 数据库中。我已经尝试了所有替代方案,但不幸的是我无法弄清楚。我找到了一种将坐标存储为字符串而不是 geoJSON 数组(多边形)的方法。organization 对象的 territory 属性应该是 polygon 并且应该存储在数组中。
我使用POSTMAN 进行测试,下面是我对坐标的POST 请求的截图:
当我提交我的帖子请求时,我收到了这个错误:
以下是对象如何存储在数据库中,作为字符串而不是点数组
我尝试了以下代码的多个版本,我得到了上述响应或另一个说明cast to array failed for value...。
请告诉我我做错了什么或如何使它工作。
下面是我的代码。
Organization.js
var mongoose = require('mongoose');
var organizationSchema = mongoose.Schema({
name:String,
address:String,
point:{type:[Number],index:'2d'},
territory:{
type:{
type:String,
required:true,
enum:['Point','LineString','Polygon'],
default:'Point'
},
coordinates:[mongoose.Schema.Types.Mixed]
}
});
organizationSchema.index({coordinates:'2dsphere'});
API.js
var Organization = require('./models/organization');
var express = require('express');
var mongoose = require('mongoose');
var apiRoutes = express.Router();
apiRoutes.route('/organizations')
.post(function(req,res,next){
var organization = new Organization();
var pointData = {
latitude:req.body.latitude,
longitude:req.body.longitude
};
var loc = req.body.coordinates;
organization.name = req.body.name;
organization.address = req.body.address;
organization.latitude = req.body.latitude;
organization.longitude = req.body.longitude;
organization.point = [pointData.longitude,pointData.latitude];
organization.territory = {
coordinates: loc,
type: req.body.type
};
//save the new organization and check for errors
organization.save(function (err, organization) {
if (err)
return res.send(err)
res.json({
message: 'The Organization was successfully created!',
Organization: organization
});
});
});
【问题讨论】:
-
你还需要答案吗?
-
我仍然这样做。欢迎您的回答
标签: arrays mongodb mongoose geometry geojson