如何使用Spring Data可伸缩地将元素插入MongoDB中的集合字段?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Spring Data可伸缩地将元素插入MongoDB中的集合字段?相关的知识,希望对你有一定的参考价值。
假设我们有一个名为Threads的MongoDB集合,其中有一个类型化的集合字段,用于回复原始帖子。
[当用户点击回复时,我们希望创建一个新的帖子实例,并将其附加到回复字段中。可以很容易地完成以下操作:
var thread = threadRepository.findById(threadId);
thread.getReplies().add(post);
threadRepository.save(thread);
但是出现一个问题,此解决方案是否可扩展?如果对该线程有100万个答复该怎么办?
我的主要问题是:它们都将被加载到内存中吗?
如果是的话,如果我们只想创建一个新的答复,那不是浪费吗?推荐的解决方案是什么?
答案
如果所有答复都嵌套在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,并考虑可行的加载策略。
以上是关于如何使用Spring Data可伸缩地将元素插入MongoDB中的集合字段?的主要内容,如果未能解决你的问题,请参考以下文章