MongoDB四 之 Limit 选取 Skip 跳过 Sort 排序

Posted GuoXY

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB四 之 Limit 选取 Skip 跳过 Sort 排序相关的知识,希望对你有一定的参考价值。

在关系型数据库中的选取(limit),排序(sort) MongoDB中同样有,而且使用起来更是简单

首先我们看下添加几条Document进来

现在有四条Document 根据它们, 对 Limit Skip Sort 分别展开学习 

 

1. Limit 选取 

从这些 Document 中取出多少个

做个小例子 : 我只要 2 条 Document

结果是很明显的

但是我还是要解释一下 : limit(2) 就是选取两条Document, 从整个Collection的第一条 Document 开始选取两条

如果我们不想从第一条Document开始选取,怎么办呢?

 

2.Skip 跳过 

我要跳过多少个Document

做个小例子 : 我要跳过前两个 Document 直接从第三个Document 开始

结果还是很明显

按照国际惯例解释一下 : skip(2) 就是跳过两条Document, 从整个Collection 的第一条 Document 开始跳,往后跳两条

另一个例子 : 跳过第一条 直接从 第二条 开始

问题来了,我只想要第二条和第三条怎么处理呢?

 

3.Limit + Skip 

从这儿到那儿 的 选取

就是刚才的问题,一个小例子 : 我只想要第二条和第三条怎么处理呢

国际惯例 : 跳过第一条Document 从第二条开始选取两条 Document

另一种写法:

两种写法完全得到的结果完全一样但是国际惯例的解释却不同

国际惯例 : 选取两条Document 但是要 跳过 第一条Document 从 第二条 开始 选取

这两种写法二选一即可

 

4. Sort 排序

 将结果按照关键字排序

做个小例子 : 将find出来的Document 按照 price 进行 升序 | 降序 排列

国际惯例 : 按照 price 字段进行升序 , 1 为升序 , -1 为降序

 

5. Limit + Skip + Sort 混搭

一个例子 : 选取第二条第三条 并 按照 price 进行 升序排列

问题出现了, 按道理不应该是 9800 然后 19800 吗?

注意 : Sort + Skip + Limit 是有执行优先级的 他们的界别分别是 优先 Sort  其次 Skip 最后 Limt

Skip + Limit 的优先级 也是先 Skip 再 Limit

pymongo 练习题:

import pymongo
mongo_client = pymongo.MongoClient(\'127.0.0.1:27017\')
db = mongo_client[\'gxy\']

STUDENT_LIST = [
    {"username": "小黑", "age": 20, "gender": "", "hobby": ["女孩", "王者荣耀"],
     "course": [{"name": "Python", "scour": 60},
                {"name": "javascript", "scour": 59}]},
    {"username": "小白", "age": 21, "gender": "", "hobby": ["男孩", "王者荣耀"],
     "course": [{"name": "Python", "scour": 80},
                {"name": "JavaScript", "scour": 99}]}
]

# 小黑改为小帅帅 + 小白改为小漂漂
# db.python.update({\'username\':\'小黑\'},{\'$set\':{\'username\':\'小帅帅\'}})
# db.python.update({\'username\':\'小白\'},{\'$set\':{\'username\':\'小漂漂\'}})

# 小帅帅,小漂漂,原有年龄+5岁
# db.python.update_one({\'username\':\'小帅帅\'},{\'$inc\':{\'age\':5}})
# db.python.update_one({\'username\':\'小漂漂\'},{\'$inc\':{\'age\':5}})

# 小帅帅的hobby + 吃鸡
# db.python.update_one({\'username\':\'小帅帅\'},{\'$push\':{\'hobby\':\'吃鸡\'}})

# 小漂漂的hobby + 奇迹暖暖
# db.python.update_one({\'username\':\'小漂漂\'},{\'$push\':{\'hobby\':\'奇迹暖暖\'}})

# 小帅帅和小漂漂 加入学科html 分数为 70
# db.python.update({\'username\':\'小帅帅\'},{\'$push\':{\'course\':{\'name\':\'html\',\'scour\':70}}})
# db.python.update({\'username\':\'小漂漂\'},{\'$push\':{\'course\':{\'name\':\'html\',\'scour\':70}}})

# 查询爱好"女孩"的学生性别
# ret= db.python.find_one({\'hobby\':\'女孩\'})[\'gender\']
# print(ret)

# 查询爱好"奇迹暖暖"的学生名称
# ret = db.python.find_one({\'hobby\':\'女孩\'})[\'username\']
# print(ret)
# 小帅帅和小漂漂 谁有60分以下的课程

ret = db.python.find_one({\'course\':[{\'scour\':60}]})
print(ret)
# 小帅帅和小漂漂 谁有80分以上的课程

#  小帅帅和小漂漂 谁有60分以下的课程 并显示课程名 分数 姓名

# 小帅帅和小漂漂 谁有80分以上的课程 并显示课程名 分数 姓名

# 学科中加入comment : "优秀"  ( <60 : 不及格, >=60 <80: 中 , >=80 <90: 良 , >=90 优)

# db.python.remove({})
# db.python.insert(STUDENT_LIST)
res = db.python.find()
for i in res:
    print(i)
MongoDB练习

 

 

以上是关于MongoDB四 之 Limit 选取 Skip 跳过 Sort 排序的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 之 Limit 选取 Skip 跳过 Sort 排序 MongoDB - 7

7,MongoDB 之 Limit 选取 Skip 跳过 Sort 排序

MongoDB limit 选取 skip跳过 sort排序 方法

MongoDB——聚合管道之$limit&$skip&$sort操作

mongodb sort limit和skip用法

MongoDB Limit与Skip方法