将对象添加到java mongodb中的数组

Posted

技术标签:

【中文标题】将对象添加到java mongodb中的数组【英文标题】:Add object to an array in java mongodb 【发布时间】:2016-11-10 17:43:02 【问题描述】:

我需要以最“最佳实践方式”将一个对象添加到嵌套在另一个对象内的数组中。

问题是我不想从数据库中提取整个数组只是为了添加一个新对象。一定有更好的方法来做到这一点,比如通过查询将新对象添加到数组中?

至于现在,我提取了一个包含帖子的业务对象,添加了新帖子,然后更新了业务对象。

public interface BusinessRepository extends MongoRepository<Business, String> 

    @Query(value=" 'id' : ?0 ", fields=" 'posts' : 1 ")
    Business findOneIncludeOnlyPosts(String id, Pageable pageable);

我想要实现的是这样的:

@Query(value=" SOME QUERY ")
void putPostInBusinessPosts(String id, Post post);

有可能还是我必须以更昂贵的方式来做?

使用:

spring-boot 1.3.5 mongo-java-driver 3.2.2

【问题讨论】:

【参考方案1】:

您无法使用MongoRepository 来实现它。为此,您必须使用 MongoTemplate

我不认为它更昂贵,但可能更冗长。

import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

...

Update update = new Update();
update.addToSet("posts", post);
Criteria criteria = Criteria.where("_id").is(id);
template.updateFirst(Query.query(criteria), update, "business");

假设业务是集合的名称。

【讨论】:

感谢您的回复。有没有办法通过 BusinessRepository 接口同时使用 MongoRepository 和 MongoTemplate? 您可以通过having a custom repository implementation 并在其中注入MongoTemplate 来完成 顺便说一句,如果你想触发$push,你应该使用update.push而不是update.addToSet mongotemplate 如何知道它需要保存到哪个集合?

以上是关于将对象添加到java mongodb中的数组的主要内容,如果未能解决你的问题,请参考以下文章

将数组中对象的字段添加到同一数组中对象的另一个字段MongoDB

如何使用mongodb中的对象更新数组?

将对象数组添加到 mongodb 问题

如何使用 java spring 注释在 MongoDB 中创建一个完全填充的引用对象

MongoDB/Mongoose - 仅当某个字段是唯一的时才将对象添加到对象数组中

将对象数组添加到单个数组中