将对象添加到 java mongodb 中的数组
Add object to an array in java mongodb
我最需要将一个对象添加到嵌套在另一个对象中的数组中 "best practice way"。
问题是我不想从数据库中提取整个数组只是为了添加一个新对象。必须有更好的方法来做到这一点,比如通过查询将新对象添加到数组中?
至于现在,我正在提取包含 post 的业务对象,添加新的 post,然后更新业务对象。
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-驱动程序 3.2.2
您无法使用 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");
假设 business 是集合的名称。
我最需要将一个对象添加到嵌套在另一个对象中的数组中 "best practice way"。
问题是我不想从数据库中提取整个数组只是为了添加一个新对象。必须有更好的方法来做到这一点,比如通过查询将新对象添加到数组中?
至于现在,我正在提取包含 post 的业务对象,添加新的 post,然后更新业务对象。
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-驱动程序 3.2.2
您无法使用 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");
假设 business 是集合的名称。