mongo查询未按顺序运行

时间:2020-04-28 05:31:08

标签: mongodb mongotemplate

我有一本书上课-

public class Book {
    @Id
    private int bookId;
    private String name;
    private String authorName;
 }

我的存储库类扩展了mongoRepository

以下是我正在运行的操作步骤-

  1. 我正在使用mongoTemplate.aggregate来汇总Book类上的一些数据
  2. 然后我要使用bookRepository.deleteById()按bookId删除图书
  3. 然后使用bookRepository.saveAll()将聚合结果保存到bookRepository
  4. 然后在下一步中,我使用book类进行汇总,并且使用mongoTemplate.aggregate()从book类进行汇总。
  5. 通过使用libraryRepository.deleteByBookId()从名为libraryRepository的新类存储库中删除垂直bookId的条目
  6. 使用libraryRepository.saveAll()将聚合结果保存到libraryRepostiry

下面是我的结果-

  1. 第1步到第3步运行正常,我可以在数据库中看到结果
  2. 第4步不会引发任何错误,当我尝试在robo3T中手动运行它时,效果很好
  3. 在第6步之后,期望会看到一个包含“库”集合中聚合数据的文档,但是有时它会起作用,并且有时它自己的文档会被删除。

根据我的理解,只有在删除Library集合中的数据并且在步骤4中没有从聚合中获得任何结果时,才会发生这种情况,因此我们没有将任何内容保存到集合中,这就是为什么要删除文档的原因。并且在失败的情况下,我看不到任何将数据保存到集合的日志,但是当它通过时,我可以看到那些行,因此,总的来说,聚合给出了空值。但这不会发生,因为在我的汇总中,我正在从Book集合中查找另一个集合,并从该集合中添加一些字段。如果Book中有数据,则此聚合将不会给出空结果,在我的情况下,这是正确的,Book中有数据。

我唯一想到的可能是它破坏了步骤3,在Book集合中删除了数据,而当我们将数据存储在Book集合中时,步骤4中的第二个聚合在步骤3完成之前运行。可能吗?还有其他可能破坏它的解决方案吗?

我正在使用MongoDB Shell版本4.2.3。

0 个答案:

没有答案