如何用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”的不同模式定义:

  1. trk:Schema.Types.Mixed
  2. trk:[Schema.Types.Mixed]
  3. 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。

我修好了,现在它工作出色。 对不起,虚惊一场。