gpt4 book ai didi

mongodb - 用于投票的 Mongo 数据建模/更新(向上和向下)

转载 作者:可可西里 更新时间:2023-11-01 10:07:56 25 4
gpt4 key购买 nike

Mongo中有一个关于投票数据模型/更新查询的例子:
http://www.mongodb.org/display/DOCS/MongoDB+Data+Modeling+and+Rails#MongoDBDataModelingandRails-AtomicUpdates

但是我需要赞成票和反对票(基本上,一个人可以投赞成票或反对票)。另外,我希望选民能够改变主意,将赞成票改为反对票,反之亦然(因此选民名单和总数不适合)。

最好的数据模型和相应的更新调用是什么?

我看到两种可能性,要么做一个

'votes': [{ 'user_id' : ... , 'vote': ±1 }]

'upvoters': [...], 'downvoters': [...]

但是我还不能对第一个进行更新查询,第二个看起来有点奇怪(尽管可能只有我一个人)。

最佳答案

使用第二个模式似乎更简单。

Document:  { name: "name",
upvoters: [name1, name2, etc],
downvoters: [name1, name2, etc],
}

要获得总票数,您可以获取文档并使用doc.upvoters.length-doc.downvoters.length(每个文档以 upvoters 和 downvoters 数组为 [ ] 开始)

要记录用户“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"}})

关于mongodb - 用于投票的 Mongo 数据建模/更新(向上和向下),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5035413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com