!已解决!
这里的问题是,我不知道什么包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 –