如何使用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中的集合字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何有效地将元素插入数组的任意位置?

如何有条件地将元素插入列表?

Matlab - 迭代地将行插入/追加到矩阵中

Spring Data JPA - 手动插入后的密钥冲突

如何正确地将 ImagePicker 插入标题中的图像? SwiftUI

如何使用 Spring Data / JPA 插入 Postgres Array 类型列?