我需要创建一个计数器来跟踪我喜欢的图像或视频中显示的多媒体项目上的“喜欢”/“心”,这个功能非常标准,与facebook / Instagram非常相似/ Dribble呢。
我想了解如何实施这种计数器的一些建议,并继续这个实现,同时考虑到它的最佳性能。
到目前为止,我的实体模型如下:
public class Portfolio:Entity
{
public int UserId { get; set; }
public string Url { get; set; }
public string Thumbnail { get; set; }
public string FullSizeImage { get; set; }
public string Description { get; set; }
public MediaType MediaType { get; set; }
}
请查看dribbble屏幕截图以供参考
我正在使用C#和MongoDB Driver / MongoRepository
答案 0 :(得分:1)
MongoDB支持原子增量操作。您可以在此处查看相关文档:http://docs.mongodb.org/manual/reference/operator/inc/
db.portfolio.update({ _id: 10},{ $inc: { likes: 1 } });
这将使用_id为10的项目组合中的1来更新likes字段。即使2或10个不同的用户同时执行此操作,增量操作也会将它们全部计算在内。
在C#中,有很多方法可以做到这一点,最容易使用构建器。
var query = Query<Portfolio>.EQ(x => x.UserId, 10);
var update = Update<Portfolio>.Inc(x => x.Likes, 1);
collection.Update(query, update);