查询实战演练
 
需求描述
A. 查看一个人的信息,打开页面只显示三条评论
B. 点击评论的下一页按钮,新加载三条评论
C. 默认按照评论时间降序,但是也可以选择按照姓名排序
 
 
提示
A. 添加数据时注意排序
B. 查询的时候投影是有技巧的
C. 排序考虑聚合?
 
脚本
1)考虑到默认顺序,所以新增评论时,使用$sort 运算符按照评论时间降序排序;
db.users.updateOne({"username":"lison",},
{
"$push": {
"comments": {
$each: [
{
"author" : "james",
"content" : "lison 是个好老师!",
"commentTime"
:
ISODate("2018-01-06T04:26:18.354Z")
}
],
$sort: {"commentTime":-1}
}
}
}
);
 
注意:$sort 操作符必须和$each 配合使用
2)由于评论已经按照时间降序排序,所以查看人员时直接加载最新的三条评论;

db.users.find({"username":"sunboy"},{"comments":{"$slice":[0,3]}}).pretty()

 

3点击评论的下一页按钮,新加载后三条评论(注意:仅仅加载评论的数据,人员信息

不加载)
db.users.find({"username":"sunboy"},{"comments":{"$slice":[0,3]},$id:1}).pretty()
 

mongoDb 使用技巧

 
4)如果有多种排序需求怎么处理?使用聚合
 

db.users.aggregate({$match:{username:"sunboy"}},{$unwind:"$comments"},{$sort:{"comments.commentTime":-1}},{$project:{comments:-1}},{$skip:1},{$limit:3}).pretty();
mongoDb 使用技巧

相关文章:

  • 2022-12-23
  • 2022-01-30
  • 2021-08-25
  • 2022-03-06
  • 2021-12-04
  • 2021-11-30
  • 2021-12-05
猜你喜欢
  • 2021-09-27
  • 2022-12-23
  • 2021-07-27
  • 2021-06-26
  • 2021-09-17
  • 2021-07-21
相关资源
相似解决方案