以反应方式将嵌套记录插入 mongo



试图围绕反应堆模型和管道,我想插入到mongo几个Users,然后为每个用户我想插入几(10(Offers

我目前的实现包括将 3 个用户插入数据库,以有点落后的方式阻止和插入优惠(仅适用于 1 个用户(,如下所示

Flux.just(u1, u2, u3).flatMap(u -> reactiveMongoTemplate.insert(u)).blockLast();
Arrays.asList(u1, u2, u3).forEach(user -> {
IntStream.range(0,10).forEach(i -> reactiveMongoTemplate.insert(new Offer(user)).subscribe());
});

第一行运行正常,但我得到以下异常

java.lang.IllegalStateException: state 應該是: open

当然,我可以通过为每个用户单独插入来绕过这一点,我不知道为什么会提出此异常,也非常感谢有关此问题的答案

的主要问题是如何以最被动的方式编写它,我是否需要阻止以在插入后填充实体Id或者有更好的方法?

UserOffer的确切实现并不重要,它可以是任何简单的记录,但在这里它们是

@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(collection = "users")
public class User extends BaseEntity {
private String name;
}

@Data
@Document(collection = "offers")
public class Offer extends BaseEntity {
private String title;
@JsonSerialize(using = ToStringSerializer.class)
private ObjectId user;
public Offer(){
this.title = "some title " + new Random().nextInt(10);
}
public Offer(User user){
this();
this.user = new ObjectId(user.getId());
}
public void setUser(String userId) {
this.user = new ObjectId(userId);
}
}

reactiveMongoTemplate来自弹簧启动启动器数据Mongodb反应@EnableReactiveMongoRepositories

感谢

事实证明,我非常接近正确的解决方案

Flux.just(u1, u2, u3).flatMap(u -> reactiveMongoTemplate.insert(u)).subscribe(u -> {
Flux.range(0,10).flatMap(i -> reactiveMongoTemplate.insert(new Offer(u))).subscribe();
});

现在代码是真正反应式的,也可以在数据库上看到(记录以随机顺序插入(

最新更新