我目前在为以下文档创建架构时遇到问题。来自服务器的响应总是将“trk”字段值返回为 [Object]。不知何故,我不知道这应该如何工作,因为我至少尝试了所有对我有意义的方法;-)
如果这有帮助,我的 Mongoose 版本是 3.6.20 和 MongoDB 2.4.7 在我忘记之前,最好也将其设置为 Index (2d)
原始数据:
{
"_id": ObjectId("51ec4ac3eb7f7c701b000000"),
"gpx": {
"metadata": {
"desc": "Nürburgring VLN-Variante",
"country": "de",
"isActive": true
},
"trk": [
{
"lat": 50.3299594,
"lng": 6.9393006
},
{
"lat": 50.3295046,
"lng": 6.9390688
},
{
"lat": 50.3293714,
"lng": 6.9389939
},
{
"lat": 50.3293284,
"lng": 6.9389634
}]
}
}
Mongoose 架构:
var TrackSchema = Schema({
_id: Schema.ObjectId,
gpx: {
metadata: {
desc: String,
country: String,
isActive: Boolean
},
trk: [{lat:Number, lng:Number}]
}
}, { collection: "tracks" });
Chrome 中 Network 选项卡的响应总是如下所示(这只是 trk 部分错误):
{ trk:
[ [Object],
[Object],
[Object],
[Object],
[Object],
[Object],
我已经为“trk”尝试了不同的架构定义:
- trk: Schema.Types.Mixed
- trk: [Schema.Types.Mixed]
- trk:[ { type:[Number], index: "2d"}]
希望你能帮助我;-)
最佳答案
您可以通过以下方式声明 trk :- 要么
trk : [{
lat : String,
lng : String
}]
或
trk : { type : Array , "default": [] }
在第二种情况下,在插入过程中创建对象并将其推送到数组中,如
db.update({'Searching criteria goes here'},
{
$push : {
trk : {
"lat": 50.3293714,
"lng": 6.9389939
} //inserted data is the object to be inserted
}
});
或者你可以设置对象数组
db.update ({'seraching criteria goes here ' },
{
$set : {
trk : [ {
"lat": 50.3293714,
"lng": 6.9389939
},
{
"lat": 50.3293284,
"lng": 6.9389634
}
]//'inserted Array containing the list of object'
}
});
关于node.js - 如何使用 2d 地理索引在 Mongoose 模式中正确定义数组中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19695058/