在MongoDB中的线程安全性读写访问

9 浏览
0 Comments

在MongoDB中的线程安全性读写访问

我正在尝试更新MongoDb数据库中的一个名为StaticsModel的实体。该实体具有属性,如mapped(int)、date(日期)、sent(int)、id(主键)等。我在不同的API中为同一个日期更新同一个实体,例如,在一个API中我更新了发送数量,在另一个API中我更新了映射数量等。以下代码是否线程安全?因为当多台计算机同时访问多个API时,我会得到相同日期的不同结果。例如,当我更新映射数量时,发送数量会得到另一个随机变量。如何使这段代码线程安全?我认为将属性设置为原子操作可以解决问题,但现在我有些怀疑。谢谢。

StatisticsModel statisticsModel = new Statistics();
String today = new SimpleDateFormat("dd-MM-yyyy").format(new Date());
statisticsModel.setDate(today);
List statisticsCreate = statisticsRepository.findByDate(today);
if (statisticsCreate.size() < 1)
    atomicLong.set(0);
for (StatisticsModel statisticsModelRes : statisticsCreate) {
    statisticsModel.setMapped(statisticsModelRes.getMapped());
    statisticsModel.setSent(statisticsModelRes.getSent());
}
statisticsModel.setReceived(atomicLong.incrementAndGet());
statisticsRepository.upsert(statisticsModel);

编辑:我觉得我的问题与这个问题几乎相似:

无法锁定mongodb文档,如果我需要怎么办?

0