一个用Node写的网站如何实现淘宝评分这种制度(express+mongoose)
发布于 8 年前 作者 ceclinux 4205 次浏览 最后一次编辑是 5 年前

用express简单的假设了一个购物网站,在评分这个需求的时候卡壳了,具体如下

每个用户都可以对某个商品进行评分,但只能评一次,商品会显示平均分,就像京东,淘宝那种

自己想了下是可以做,但是实现太过繁琐。google又不知道如何搜起

求思路,谢谢~

9 回复

哇,是乃啊~
=3=
这个实现用非关系数据库不太好做呢

想了一下,可以再用户里添加个已评分的商品list

{
    _id: xx,
    username: 'xxx',
    ...,
    rated_list: [
        {商品id: 5},
        {商品id2: 4},
    ],
    ...
}

不过这样查询的时候可能麻烦点了,但是可控比较好,判断某商品是否评过分比较简单(嘛,也不算简单)。
以至于算平均分,在商品那里加个average,每次评分的时候改变,目测并发大的话要加锁。

和我想的差不多,我试着实现下,谢啦~ PS:最近到处见到你

@ceclinux 最近好寂寞到处乱窜啦

@RicterZ {商品id: 5}是如何写入数据库的?

先去到list,然后把它push到list里然后在update。
细节就不清楚了(其实也就这样啦w

去到/取到

最笨的办法就是建一个评分的collection呗,就三个字段[ "userId", "goodsId", "score" ]

然后在商品的collection里面加两个字段:平均分和评分人数。

然后用户评分的时候先去看看该用户有没有评这个商品,如果有的话就加上去,然后把商品里面的平均分乘以人数然后加上当前用户评分除以人数加一,然后人数也加一存回数据库。

这个恐怕只能按关系型数据库的老套路更加方便了

回到顶部