!已解決!
這裏的問題是,我不知道什麼包aldeed:collection2正在做我的代碼。我添加了這個包來使用OrionJS(這裏是github page)。我沒有注意到這aldeed:collection2是強制驗證我所有的更新。我之前遇到過這個問題,但它給了我一個錯誤。在過去,我能夠追查錯誤。這一次,有任何地方都沒有錯誤。它會更新數組,但是有一個空對象。很混亂。我將在aldeed:collection2的項目頁面上發佈一個問題。
從project documentation:「[aldeed:collection2是]流星包,允許你的模式附着到Mongo.Collection 插入和更新從客戶端或服務器代碼時自動驗證針對該架構。」。
用於校正的documentation可以找到here。
解決方法:
因爲我使用aldeed:simple-schema和aldeed:collection2我需要確保以正確的「架構」連接到我的收藏。
像這樣:
Ideas.attachSchema(new SimpleSchema({
// ... a bunch of other schema data
// I was missing this:
score: {
type: [Object],
optional: true,
label: 'Score',
},
"score.$.userId": {
type: String,
optional: true,
label: 'Score'
},
"score.$.score": {
type: String,
optional: true,
label: 'Score'
}
// ... a bunch more schema data
});
故障排除:
我怎麼算出這個?
嗯,我是新來的MongoDB - 所以我不願意去控制檯,只是嘗試從那裏做更新。事實上,直到我和我妻子說話之前,我纔想到這一點。
我試了一下,在附近加了引號一切都是,看着別人的代碼。我檢查了所有MongoDB的優秀文檔。我看着YouTube視頻。我看着其他stackoverflow.com解決方案。最後,我想到其他人的代碼看起來完全像我的代碼,這應該是正常的。我甚至在Clarity.fm上註冊,以每分鐘1美元的價格從Sacha Greif提問。
...我開始認爲我的mongo數據庫沒有工作。也許我的mongo安裝被打破了嗎?
所以,好吧,對於一個測試。經過這樣的折磨它終於來到了我兩天 - 就嘗試在蒙戈控制檯更新......(杜)
meteor:PRIMARY> db.ideas.update({_id:"DqEGjK3xSTBdpEgXa"}, {$addToSet: {score: {userId: "123456", score: 1}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
meteor:PRIMARY> db.ideas.find()
{
"_id" : "DqEGjK3xSTBdpEgXa",
"title" : "Revive Randolf With Bloodmagic",
"body" : "Bring Randolf back from the dead using witche's bloodmagic.",
"userId" : "Rz28ByKYM4Y8futFb",
"author" : "Iryna Iglehart",
"episodeId" : "iQaxyLPi5iaYtQngf",
"timestamp" : ISODate("2016-06-08T17:37:57.237Z"),
"score" : [
{
"userId" : "123456",
"score" : 1
}
],
"overallScore" : 0,
"votedOnBy" : [ ],
"timesVotedOn" : 0
}
一旦我知道mongo可以做我的更新 - 我知道問題必須與我的流星設置。如果這是一個問題,我現在會發現流星問題。我搜索谷歌的每個黑暗角落,試圖找出這一個。
不久之前我記得我之前有奇怪驗證問題。除了這些驗證問題總是會出現錯誤。事實上沒有錯誤,數組只是簡單地用空對象更新,真的讓我有一個循環。
我學到了什麼:
- 如果在第一流星失敗,請嘗試蒙戈控制檯...
- 按@David Weldon的評論 - 另一個很好的調試技術,它會幫助我,我很久以前就可以嘗試的是開始一個新的流星計劃,並在那裏測試我的代碼,然後一次添加一個軟件包,並查看它/它們中的任何一個是否破壞代碼。這個測試應該指出,從根本上說,代碼是正確的,並且只需要附加的程序包就可以了。
- 請勿盲目添加包裹。瞭解如果/當包轉變發展這樣的流程爲aldeed:collection2
謝謝:
非常感謝@Michel Floyd和@David Weldon您對這個問題的所有幫助。
重要鏈接:
- 我學到common mistakes不少由@David Weldon
- 的documentation for aldeed:collection2
- 的documentation for aldeed:simple-schema
- 搜尋有關this meteor tutorial 「查找數據」 寫 - 它說話關於fetch()以及它如何有用。這幫助我解決了這個問題。
- 回顧documentation on about update從MongoDB的
- MongoDB $addToSet Documentation
- MongoDB $push Documentation
- [MongoDB的BIOS實例收藏](https://docs.mongodb.com/manual/reference/bios-example-collection/] - 它看着像這樣,我真的想通了文件後,有什麼錯我的數據庫設計,那裏應該是一個辦法做到這一點一直(且有,很明顯)
相關問題:
[Solved] How to Update An Array of Subdocuments on a MongoDB Collection in MeteorJS
'.find()'和'.findOne()'格式稍有不同的流星蒙戈控制檯,嘗試了後者。或嘗試'db.ideas.findOne(id).score' –
@Jeremy我懷疑你只是看到以前嘗試插入的文檔和/或你從多個地方插入。如果這是一個開發環境,請嘗試執行'db.ideas.remove({})',然後再次啓動該應用程序(或執行「流星重置」)。另請參閱[常見錯誤](https://dweldon.silvrback.com/common-mistakes)查找vs findOne與流星中的獲取。 –
[@Michel Floyd](http://stackoverflow.com/users/2805154/michel-floyd):感謝您的建議。我試過了,沒有運氣。這是[我的主機的輸出:](https://git.io/vom7c)https://git.io/vom7c –