Mongo 中有一个关于投票数据模型/更新查询的示例:
http://www.mongodb.org/display/DOCS/MongoDB+Data+Modeling+and+Rails#MongoDBDataModelingandRails-原子更新 http://www.mongodb.org/display/DOCS/MongoDB+Data+Modeling+and+Rails#MongoDBDataModelingandRails-AtomicUpdates
然而,我需要赞成票和反对票(基本上,一个人可以投赞成票或反对票)。另外,我希望选民能够改变主意,将赞成票改为反对票,反之亦然(因此选民名单和总数不合适)。
最好的数据模型和相应的更新调用是什么?
我看到两种可能性,要么做
'votes': [{ 'user_id' : ... , 'vote': ±1 }]
or
'upvoters': [...], 'downvoters': [...]
但我还无法对第一个进行更新查询,第二个看起来有点奇怪(尽管可能只是我)。
使用第二种模式似乎更简单。
Document: { name: "name",
upvoters: [name1, name2, etc],
downvoters: [name1, name2, etc],
}
要获得总票数,您可以获取文档并使用
doc.upvoters.length-doc.downvoters.length
(每个文档以赞成者和反对者数组开始 [ ])
要记录用户“x”对项目“c”的任何赞成票,只需执行以下操作:
db.votes.update({name:"c"},{$addToSet:{upvotes:"x"},$pull:{downvotes:"x"}})
这是原子性的,即使运行 10 次也可以做同样的事情。
它还使您不必检查“x”是否已经投票给“c”以及以何种方式投票。
要记录反对票,只需将其反转即可:
db.votes.update({name:"c"},{$addToSet:{downvotes:"x"},$pull:{upvotes:"x"}})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)