匹配查询
数据类型如图
其中
@Document
public class GroupBuy extends AbstractEntity {
private String bookTitle;
private String bookId;
private Double bookPrice;
private JFile bookCover;
private Double price;
private Long timestamp;
private UserInfo createdBy;
// the user already joined in
private Set<UserInfo> members;
private GroupBuyType type;
private GroupBuyStatus status;
@Pojo
public class UserInfo {
private String id;
private String alias;
private String walletAddress;
private JFile avator;
需求: 要判断当前用户是否已经参加了团购,即GroupBuy.member是否包括当前用户。
代码:
Criteria criteria = new Criteria();
criteria.and("bookId").is(bookId);
criteria.and("members").elemMatch(Criteria.where("id").is(provider.getId()));
criteria.and("status").in(GroupBuyStatus.started, GroupBuyStatus.finished);
if (mongoTemplate.exists(new Query(criteria), GroupBuy.class))
throw new Exception("you can not create groupbuy to buy same book twice!");
Criteria criteria = Criteria.where("bookId").is(bookId).and("status")
.in(GroupBuyStatus.finished, GroupBuyStatus.started).and("members")
.elemMatch(Criteria.where("id").is(provider.getId()));