首先先贴上一个我在查阅资料时参考的一个链接,https://www.jianshu.com/p/a576499769ae,这篇文章大概讲解了如何利用Spring 操作Mongo进行增删改查。但是笔者在实际的开发过程中,遇到了多对多的模型设计,当然笔者第一时间也在互联网搜索了相关的资料,最终采用的设计,是存一个List集合。
"_id" : ObjectId("5ea132115cbf0e0d3a5d5578"),
"Self" : {
"PersonId" : "1",
},
"Family" : [{"FamilyId":" ","role":""}],
但是如何操作Family的数据也花了一番功夫。有几个场景就是(根据FamilyId查询这个家庭下面的所有成员,并且返回前端对应role字段)(将某个人绑定家庭)(修改某个人在某个家庭下的角色)
接下来,记录下自己在开发中详细流程吧,设计好Mongo的Collections后,就写对应的Document实体类了,这里推荐用建造者模式来定义实体,否则后面赋值变量一直用set赋值,代码阅读性太差。
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
@Document
@Builder
public class demo {
@Field(value = "Family")
private List<Family> families;
}
@Data
@EqualsAndHashCode(callSuper = false)
@Builder
public static class Family{
private String FamilyId;
private int role;
}
}
- (修改某个人在某个家庭下的角色)
- contorller层
@ApiOperation("成为管理员")
@PostMapping("/becomeAdmin")
public R<?> becomeAdmin(@RequestParam String PersonId,@RequestParam String FamilyId)
{
mongoUserProfileService.becomeAdmin(PersonId,FamilyId);
}
2 . service层
Query query = Query.query(new Criteria().andOperator(Criteria.where("Self.PersonId").is(personId),Criteria.where("Family").elemMatch(Criteria.where("FamilyId").is(familyId))));
Update update=new Update();
update.set("Family.$.role",2);