https://robomongo.org/
robo 3T客户端
https://robomongo.org/
NoSQLBooster for MongoDB
分享个工具,可以把sql语句转成MongoDB查询语句
查询实战演练
需求描述
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()
(
4
)如果有多种排序需求怎么处理?使用聚合
db.users.aggregate({$match:{username:"sunboy"}},{$unwind:"$comments"},{$sort:{"comments.commentTime":-1}},{$project:{comments:-1}},{$skip:1},{$limit:3}).pretty();