如何用2d geo索引正确定义Mongoose模式中的数组对象
我目前在为下面的文档创build模式时遇到问题。 来自服务器的响应总是以“对象”的forms返回“trk”字段值。 不知何故,我不知道这应该如何工作,因为我至less尝试了所有对我有意义的方法;-)
如果这有帮助,我的Mongoose版本是3.6.20和MongoDB 2.4.7而在我忘记之前,它也将很好设置为索引(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浏览器networking标签的回应总是如此(这只是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' } });
我有一个与mongoose类似的问题:
fields: [ '[object Object]', '[object Object]', '[object Object]', '[object Object]' ] }
实际上,我在模式中使用“type”作为属性名称:
fields: [ { name: String, type: { type: String }, registrationEnabled: Boolean, checkinEnabled: Boolean } ]
为了避免这种行为,您必须将参数更改为:
fields: [ { name: String, type: { type: { type: String } }, registrationEnabled: Boolean, checkinEnabled: Boolean } ]
感谢您的答复。
我尝试了第一种方法,但没有任何改变。 然后,我试图logging结果。 我只是逐级钻取,直到我终于到达显示数据的地方。
一段时间后,我发现这个问题:当我发送响应时,我通过.toString()
将它转换为一个string。
我修好了,现在它工作出色。 对不起,虚惊一场。