【发布时间】:2015-12-04 23:28:45
【问题描述】:
我一直在做这样一件直截了当的事情。我只想使用 nodejs、mongoose、restify 堆栈对用户模型进行 CRUD 操作。我的 mongo 实例在 mongolab 上。 用户应该包含一个“loc”字段。用户架构如下:
var mongoose = require('mongoose')
var Schema = mongoose.Schema;
var userSchema = new Schema( {
email_id : { type: String, unique: true },
password: { type: String},
first_name: String,
last_name: String,
age: String,
phone_number: String,
profile_picture: String,
loc: {
type: {},
coordinates: [Number]
}
});
userSchema.index({loc:'2d'});
var User = mongoose.model('user', userSchema);
module.exports = User;
其余用来发帖的api如下:
create_user : function (req, res, next) {
var coords = [];
coords[0] = req.query.longitude;
coords[1] = req.query.latitude;
var user = new User(
{
email_id : req.params.email_id,
password: req.params.password,
first_name: req.params.first_name,
last_name: req.params.last_name,
age: req.params.age,
phone_number: req.params.phone_number,
profile_picture: req.params.profile_picture,
loc: {
type:"Point",
coordinates: [1.0,2.0] // hardcoded just for demo
}
}
);
user.save(function(err){
if (err) {
res.send({'error' : err});
}
res.send(user);
});
return next();
},
现在当我在curl -X POST http://localhost:3000/user --data "email_id=sdass@dfAadsfds&last_name=dass&age=28&phone_number=123456789&profile_picture=www.jakljf.com&longitude=1.0&latitude=2.0" 上进行 POST 调用时
我收到以下错误
{
error: {
code: 16804
index: 0
errmsg: "insertDocument :: caused by :: 16804 location object expected, location array not in correct format"
op: {
email_id: "sdass@dfAadsfdsadkjhfasvadsS.com"
password: "sdass123DadakjhdfsfadfSF45"
first_name: "shaun"
last_name: "dass"
age: "28"
phone_number: "123456789"
profile_picture: "www.jakljf.com"
loc: {
coordinates: [2]
0: 1
1: 2
-
type: "Point"
}-
_id: "55efc95e0e4556191cd36e5e"
__v: 0
}-
}-
}
位置字段会出现问题,因为如果我从模型中删除 loc 字段,POST 调用就可以正常工作
以下是我所做的命中/试验:
1) 将userSchema.index({loc:'2d'}); 更改为userSchema.index({loc:'2dsphere'});
2) 将 loc 模式更改为 Stackoverflow 中给出的所有内容。我想知道定义这个的正确方法。
3) 传递硬编码二维数组,但它仍然显示Location object expected, location array not in correct format" 这需要什么格式?
非常感谢您在这方面的任何帮助。谢谢。
【问题讨论】:
-
您能否再次尝试使用
.pretty()选项实际列出您从 mongo shell 获得的文档。原因是该文档似乎是“无聊的”,我很确定这不是错误输出。架构定义对于 GeoJSON 类型不正确,可能是“无聊”的原因,尽管我有点惊讶它完全可以工作。 -
@BlakesSeven 你是对的,它不起作用。我没有任何具有此架构的文档。我的问题是如何解决它?我正在使用 loc:'2d' 和旧坐标对。它应该可以正常工作吗?
-
您能否展示一下当前文档的外观。这就是我所要求的,因为它有助于解决已经产生的任何问题。
-
因此,如果没有 loc 字段,文档看起来像
{ "_id": { "$oid": "55eff4cc4e1ba5b55050fa20" }, "email_id": "sdass@dfAadsfdsadkjhfasvadsS.com", "password": "sdass123DadakjhdfsfadfSF45", "first_name": "shaun", "last_name": "dass", "age": "28", "phone_number": "123456789", "profile_picture": "www.jakljf.com", "__v": 0 } -
您的问题上有一个edit 链接,请使用它。我也“特别想”看到当前的“loc”字段。索引该字段时出现错误,因此我希望看到的是当前文档中的实际结构。看起来和“理想情况下”是错误中报告的相同文档的东西。请“使用外壳”,不要将问题与转换后的“类型”混淆,如
$oid。这里。猜测集合名称是“用户”db.users.findOne({ "_id": ObjectId("55efc95e0e4556191cd36e5e") }),然后请编辑问题。
标签: arrays node.js mongodb mongoose restify