将对象添加到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
如何使用 java spring 注释在 MongoDB 中创建一个完全填充的引用对象