【问题标题】:Add object to an array in java mongodb将对象添加到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

【问题讨论】:

    标签: java mongodb spring-boot mongodb-query spring-data-mongodb


    【解决方案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 如何知道它需要保存到哪个集合?
    猜你喜欢
    • 1970-01-01
    • 2021-11-06
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    相关资源
    最近更新 更多