小编真的是~有点儿时间都献给工作了,这不这两天儿又弄了个类似论坛的东西,用的MongoDB数据库,帖子评论和回复分别弄了两张表~下面贴代码,Spring Data Mongodb(小编弄了两张表的联查,剩下的闲暇时间再弄)
首先pom.xml里要有Spring Data Mongodb的配置,如果要是在官网生成项目的话会直接带出来
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
//这里面我没用@Id,因为这个自动生成的id查询后传递到前台就变成了MongoDB:ObjectID本身的样子了,前台直接获取获不到,这里在set数据时我直接给id设置uuid了
//帖子评论表
@Data
@Document(collection = "DirectTrainPostLeaveMessage")
public class DirectTrainPostLeaveMessage {
private String id;
private String breedId; //主题id(什么品种)
private String postId; //帖子id
private String postTopic; //帖子主题
private String postTitle; //帖子标题
private String leaveMessage; //留言内容
private String leaveMessageId; //留言人id
private String leaveMessageMan; //留言人
private String leaveMessageTime; //留言时间
private int leaveMessagePraise; //留言点赞
}
//回复评论表
@Data
@Document(collection = "DirectTrainPostLeaveMessageComment")
public class DirectTrainPostLeaveMessageComment {
private String id;
private String leaveId; //留言id
private String leaveMessageMan; //留言人
private String comment; //评论内容
private String commentId; //评论人id
private String commentMan; //评论人
private String commentTime; //评论时间
private int commentPraise; //评论点赞
}
访问controller方法获取数据
@RequestMapping(value = {"/getLeaveMessage"}, produces = {"application/json;charset=UTF-8"})
@ResponseBody
public BaseResult getLeaveMessage () {
LookupOperation lookupOperation = LookupOperation.newLookup().from("DirectTrainPostLeaveMessageComment") //从表名
.localField("_id") //主表关联字段
.foreignField("leaveId") //从表关联字段
.as("CommentList"); //查询结果名
//匹配id条件
MatchOperation matchOperation = new MatchOperation(Criteria.where("postId").is(postId));
//按回帖时间排序
SortOperation sortOperation = new SortOperation(Sort.by(Sort.Order.desc("leaveMessageTime")));
Aggregation aggregation = Aggregation.newAggregation(lookupOperation);
List<Map> result = mongoTemplate.aggregate(aggregation, "DirectTrainPostLeaveMessage", Map.class).getMappedResults();
//DirectTrainPostLeaveMessage是主表名
return BaseResult.ok(result);
}
上面的java语句切换成MongoDB命令是这样儿滴~(要说这个nosql刚刚写起来也是蹩手)
db.DirectTrainPostLeaveMessage.aggregate([ //db后面的是主表名
{
$lookup:
{
from: "DirectTrainPostLeaveMessageComment", //从表名
localField: "_id", //主表关联字段
foreignField: "leaveId", //从表关联字段
as: "CommentList" //查询结果名
}
},
{
$match:
{
postId : "5e85a5d5e79d53eaacce974c"
}
},
{
$sort:
{
leaveMessageTime : -1 //排序:升序:1,降序:-1
}
}
])
数据返回效果:
页面渲染效果:
over~有不足还请指教~