如何使用Spring Data可伸缩地将元素插入MongoDB中的集合字段?

问题描述 投票:0回答:1

假设我们有一个名为Threads的MongoDB集合,其中有一个类型化的集合字段,用于回复原始帖子。

[当用户点击回复时,我们希望创建一个新的帖子实例,并将其附加到回复字段中。可以很容易地完成以下操作:

var thread = threadRepository.findById(threadId);
thread.getReplies().add(post);
threadRepository.save(thread);

但是出现一个问题,此解决方案是否可扩展?如果对该线程有100万个答复该怎么办?

我的主要问题是:它们都将被加载到内存中吗?

如果是的话,如果我们只想创建一个新的答复,那不是浪费吗?推荐的解决方案是什么?

java mongodb spring-data-mongodb
1个回答
0
投票

如果所有答复都嵌套在thread文档中,那么是的,除非您明确指定要通过@Query(fields=...)装入的字段,否则它们将被装入内存。>

为了修改文档而不必将其加载到内存中,请考虑使用更新而不是替换操作。

Update update = new Update().push("replies", post);
template.updateFirst(query(where("id").is(thread.id)), update, Thread.class)

使用$push,可以将项目附加到数组。请参阅MongoDB参考documentation了解更多详细信息。

如果打算以这种方式潜在地存储数百万个答复,那么请至少牢记Document max size limit,并考虑可行的加载策略。

© www.soinside.com 2019 - 2024. All rights reserved.