我很难弄清楚如何使用带有 Mongomatic 的原子“$set”运算符来更新 MongoDB 文档。我很确定这是我遇到问题的 Mongo 标准/更新语言,而不是 Mongomatic,但我愿意被证明是错误的。
带有独立、可运行脚本的要点的链接在这里:https ://gist.github.com/3835672
我开始创建一个如下所示的文档:
{"videos":[{"video_id":"video1"},{"video_id":"video2"}],"_id":{"$oid": "506ddd53a114604ce3000001"}}
我可以使用使用 Mongomatic 实例化的模型获取该文档:
video_group = VideoGroup.find_one('videos.video_id' => 'video1')
然后我试图通过这样做来设置一个“视图”字段:
video_group.update!({ 'videos.video_id' => 'video1' }, '$set' => { 'videos.$.views' => 123 })
这就是 Mongo 爆炸的地方,出现以下错误:
can't append to array using string field name [$]
我知道这是 StackOverflow 上一个非常常见的问题。我普遍理解问题是位置运算符没有得到任何匹配。但是,即使阅读了数十条回复,我仍然无法弄清楚如何以一种有效的方式表达这种说法。
我刚开始使用错误的数据结构吗?