2015-05-01 55 views
0

我在Meteor中使用簡單架構,集合鉤子和Autoform包,我試圖在更新集合掛鉤中更新模式中的嵌入對象。我覺得我可能做些傻事,但卻無法解決這個問題。我越來越exeption同時節省:Exception while invoking method '/providers/update' Error: 0 must be an integer 我的架構:數據類型驗證錯誤 - MeteorJS/Autoform/SimpleSchema /嵌入式簡單架構

Schemas.Providers = new SimpleSchema({ 
email: { 
type: String, 
label: 'Email Address', 
autoValue: function() { 
    if (this.isInsert || this.isUpdate) { 
    return Meteor.user().emails[0].address; 
    } 
}, 
autoform: { 
    afFieldInput: { 
    type: 'email' 
    } 
} 
}, 
officelocation: { 
type: String, 
label: 'Location of Office', 
optional:true 
}, 
location: { 
type: [LocationSchema], 
optional:true 
}}); 

收集鉤的作品:

Providers.after.update(function (userId, doc) { 
var oldDoc = this.previous; 
Providers.direct.update({_id: doc._id},{$set: {location:{ 
    type:'Point', 
    coordinates:[0,0] 
}}}); 
}); 

收集掛鉤,不工作..理想我不應該在之後更新收集更新,但要確保它可以正常工作:

Providers.after.update(function (userId, doc) { 
var oldDoc = this.previous; 
var array=[]; 
var iArray=doc.officelocation.split(","); 
array.push(Number(iArray[1])); 
array.push(Number(iArray[0])) 
Providers.direct.update({_id: doc._id},{$set: {location:[{ 
    type:'Point', 
    coordinates:array 
}]}}); 
}); 

回答

0

看看你試圖存儲什麼,使用parseInt代替你的Number 正在使用。它會返回一個mongo可以存儲的整數。


問題不在於您正在使用的方法。這是你用mongo存儲數據的方式。向我們展示您的LocationSchema的外觀。

詳細信息:

蒙戈使用不同的數字格式什麼JavaScript使用。在JavaScript中,數字可以是整數,浮點數,小數或任何你想要的。對於整數或浮點數,Mongo有非常嚴格的要求。

總的來說,如果你想在mongo中存儲一個精確的十進制數(我懷疑你想要做什麼),你必須將它存儲爲一個字符串(你沒有能力去做直接mongo操作,如$ inc $ gt等)或將其分爲兩部分並分開存儲。第三種選擇是將其存儲爲不準確的浮點數,僅當您需要某種近似值時纔有用。

+1

我的locationschema看起來像這樣。而且你是正確的,我期待存儲經緯度,所以我需要準確存儲它。 'LocationSchema =新SimpleSchema({ \t類型:{ \t類型:字符串, \t autoValue:函數(){ \t返回 「點」; \t} \t}, \t座標:{ \t類型: [編號] \t} \t});' –

+0

另外,我不能這樣,存儲爲一個字符串,因爲我使用蒙戈的geoWithin cpabilities做一些位置在我的應用中進行搜索.. –

+0

如果有人有興趣,這我通過在簡單模式中添加'decimal:true'選項解決了ssue問題。 '{{> afQuickField name =「decimal」step =「0.01」}}' –