Как определить объект в массив правильно в схему Мангуст с индексом 2Д гео
В настоящее время у меня возникли проблемы при создании схемы для документа ниже. Ответ от сервера всегда возвращает значения поля " trk " в виде [Object]. Как-то я понятия не имею, как это должно работать, так как я пробовал по крайней мере все подходы, которые имели смысл для меня ;-)
Если это поможет, моя версия Мангуст 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
}]
}
}
Мангуст Схема:
var TrackSchema = Schema({
_id: Schema.ObjectId,
gpx: {
metadata: {
desc: String,
country: String,
isActive: Boolean
},
trk: [{lat:Number, lng:Number}]
}
}, { collection: "tracks" });
ответ с вкладки "сеть" в Chrome всегда выглядит так (это только trk-часть, которая неверна):
{ trk:
[ [Object],
[Object],
[Object],
[Object],
[Object],
[Object],
Я уже пробовал разные определения схемы для "trk":
- trk: схема.Типы.Смешанный
- trk: [схема.Типы.Смешанный]
- trk: [ { type:[Number], index:" 2d"}]
надеюсь, вы можете мне помочь ; -)
3 ответа:
вы можете объявить 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' } });
у меня была аналогичная проблема с Мангустом :
fields: [ '[object Object]', '[object Object]', '[object Object]', '[object Object]' ] }
на самом деле, я использовал "тип" в качестве имени свойства в моей схеме :
fields: [ { name: String, type: { type: String }, registrationEnabled: Boolean, checkinEnabled: Boolean } ]
чтобы избежать такого поведения, вы должны изменить параметр на :
fields: [ { name: String, type: { type: { type: String } }, registrationEnabled: Boolean, checkinEnabled: Boolean } ]
Спасибо за ответы.
я попробовал первый подход, но ничего не изменилось. Затем я попытался записать результаты. Я просто сверлил уровень за уровнем, пока, наконец, не добрался до того места, где отображались данные.
через некоторое время я обнаружил проблему: когда я отправлял ответ, я преобразовывал его в строку через
.toString()
.я исправил это, и теперь он работает блестяще. Извините за ложную тревогу.