mongodb进阶查询(投影查询、分页查询(limit和skip)以及查询sort排序)

之前我们学习了mongodb的基本操作:mongodb文档(document)的增删改查操作,现在我们来学习mongodb稍微更高级的查询:投影查询、分页查询以及对查询的结果进行排序,整体来说还是很简单的。
一、投影查询在MongoDB中,投影查询意味着只选择必要的数据,而不是选择整个文档的数据。如果一个文档有5个字段,而你只需要显示3个字段,那么可以使用投影只需从中选择3个字段。
根据MongoDB查询文档中解释,MongoDB的find()方法接受第二个可选参数,这就是你想要查询的字段列表。在MongoDB查询中,当你执行find()方法时,它将显示文档的所有字段。为了限制这一点,你需要设置一个值为1或0的字段列表,1用于显示字段,0用于隐藏字段,例如{name: 0}表示不显示字段name。
带有投影的find()方法的基本语法如下所示:

db.collection_name.find({}, {key: 1})

假设post集合中有以下数据:
{ "_id" : ObjectId(a), "title":"AA"} { "_id" : ObjectId(b), "title":"BB"} { "_id" : ObjectId(c), "title":"CC"}

下面的示例将在查询文档时显示文档的标题:
>db.post.find({}, {"title": 1, _id:0}) {"title": "AA"} {"title": "BB"} {"title": "CC"} >

请注意,在执行find()方法时总是显示_id字段,如果不想要该字段,则需要将其设置为0。
二、分页查询分页查询在开发中是常常用的,mongodb中和分页有关的就是limit和skip查询,limit用于限制一次查询的记录数,skip用于跳过记录。
1、limit()方法
要限制MongoDB中的记录,需要使用limit()方法。该方法接受一个数字类型参数,即要显示的文档数量。
假设post集合中有以下数据:
{ "_id" : ObjectId(a), "title": "AA"} { "_id" : ObjectId(b), "title": "BB"} { "_id" : ObjectId(c), "title": "CC"}

下面的示例将在查询文档时仅显示两个文档。
>db.post.find({}, {"title": 1, _id:0}).limit(2) {"title": "AA"} {"title": "BB"} >

如果你没有在limit()方法中指定number参数,那么它将显示集合中的所有文档。
2、skip()方法
除了limit()方法之外,还有另一个方法skip(),它也接受number类型参数,用于跳过文档的数量。
skip()方法的基本语法如下:
>db.collection_name.find().limit(number).skip(number)

下面的示例只显示第二个文档:
>db.post.find({}, {"title": 1, _id:0}).limit(1).skip(1) {"title": "BB"} >

请注意,skip()方法的默认值是0。
三、对查询结果排序要在MongoDB中对文档进行排序,需要使用sort()方法。该方法接受一个包含字段列表及其排序顺序的文档,为了指定排序顺序,使用1和-1,1表示升序,-1表示降序。
sort()方法的基本语法如下:
db.collection_name.find().sort({KEY: 1})

假设收集post有以下数据。
{ "_id" : ObjectId(a), "title": "AA"} { "_id" : ObjectId(b), "title": "BB"} { "_id" : ObjectId(c), "title": "CC"}

下面的示例将按标题降序显示文档。
>db.post.find({}, {"title": 1, _id: 0}).sort({"title": -1}) {"title": "CC"} {"title": "BB"} {"title": "AA"} >

【mongodb进阶查询(投影查询、分页查询(limit和skip)以及查询sort排序)】请注意,如果你没有指定排序首选项,那么sort()方法将按升序显示文档。

    推荐阅读