mongodb排序(mongodb排序分页非常慢)
本篇文章给大家谈谈mongodb排序,以及mongodb排序分页非常慢对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、MongoDB 条件查询和排序
- 2、mongodb Aggregation聚合操作之$sort
- 3、mongodb如何根据字段(数组类型)的长度排序
- 4、MongoDB分页获取数据排序阶段缓存溢出问题
MongoDB 条件查询和排序
查询的基本格式是 db.collection.find({条件}) ,其中条件是可选的,类似于 MySQL 的 WHERE 条件一样。示例如纤梁下:
可以使用 $and 、 $or 和 $not 来设置组合毁盯运条件。
例如下面的 users 数据集:
我们查找 nickname 是岛上码农和且性别是 male :
查找分数是90或76分的用户:
查找性别不是 male 的用户和查找分数高于80分用户:
其中 $eq 为相等条件, $lt 为小于条件。
条件可以嵌套使用,例如 or 嵌套,表示 (a || b) (c || d) ,格式如下:
在 MongoDB 提供了如下比较操作则宽符,比较操作符的格式为 {key: {$op: value}} :
in 查询的格式和比较操作符类似,只是对应的值是数组,即
例如,需要查找分数为90,76的用户:
in 查询也可以和其他条件组合,如and 查询:
find 方法会将所有匹配条件的数据查找出来,因此对于数据集很大的时候会导致速度很慢且产生大量的 磁盘 I/O,如果确定数据只有1条的时候可以使用 findOne ,如果要限制查询条数可以使用 limit 或 skip 。 limit 是查询到指定数量后的结果就返回,而 skip 是跳过前面指定数量的结果。
排序使用格式如下:
其中1表示升序,-1表示降序,例如我们需要以分数降序排序:
本篇介绍了 MongoDB 的条件查询操作,限制返回条数和排序。可以看到,MongoDB 的操作虽然语法和 SQL 不同,但是都有对应的功能辅助查询,对于查询来说也是十分便捷的。
mongodb Aggregation聚合操作之$sort
在上一篇 mongodb Aggregation聚合操作之$match 中详细介绍了mongodb聚合操作中的$match使用以及参数细节。本篇将开始介绍Aggregation聚合操作中的$sort操作。
说明:
对所有输入文档进行排序,并将它们按排序顺序返回到管道。
语法:
{ $sort: { field1: sort order, field2: sort order ... } }
$sort接收一个文档,该文档指定要排序的字段和相应的排序顺序。排序顺序可以有以下值之一:
1:升序排序
-1:降序排序
{ $meta: "textScore" }:按计算的textScore元数据降序排序。
注意【如果对多个字段进行排序,则从左者弯搏到右计算排序顺序。例如,在上面的表单中,文档首先按field1排序。然后,具有相同field1值的文档按field2进一步排序。】示例
对于要排序的字段或字段,将排序顺序设置为1或-1,分别指定升序或降序排序,如下例所示:该操作对users集合中的文档进行排序,根据age字段降序排列,然后根据posts字段中的值升序排列。
db.users.aggregate(
[
{ $sort : { age : -1, posts: 1 } }
]
)
在{sort-key}文档中指定计算出的元数据的新字段名,并指定$meta表达式作为它的值,如下面的示例所示:该操作使用$text操作符匹配文档,然后首先按“textScore”元数据排序,然后按posts字段的降序排序。指定的元数据决定排序顺序。例如,“textScore”元数据按降序排序。
db.users.aggregate(
[
{ $match: { $text: { $search: "operating" } } },
首祥 { $sort: { score: { $meta: "textScore" }, posts: -1 } }
]
)
$sort + $limit内存优化
当$sort在$limit之前并且没有修改文档数量的中间阶段时,优化器可以将$limit合并到$sort中。这允许$sort操作在进行过程中只维护顶部的n个结果,其中n是指定的限制,并确保MongoDB只需要在内存中存储n个项目。当allowDiskUse为true且n项超过聚合内存限制时,这种优化仍然适用。优化可能会在不同版本之间发生变化。
$sort阶段的RAM有100兆字节的限制。默认情况下,如果阶段超过这个限制,$sort将产生一个错误。为了允许处理大型数据集,将allowDiskUse选项设置为true,以允许$sort操作写入临时文件。有关详细信息,请参阅db.collection.aggregate()方法中的allowDiskUse选项和aggregate命令。
版本2.6中的变化:$sort的内存限制从RAM的10%更改为100兆字节。
如果将$sort操作符放置在管道的开闹谈头,或放置在$project、$unwind和$group聚合操作符之前,则可以利用索引。如果$project、$unwind或$group发生在$sort操作之前,则$sort不能使用任何索引
mongodb如何根据字段(数组类型)的长度排序
貌似不能吧,排序是字段的排序貌似没有字段里面内嵌的文档而且是数组里的文档字段排序吧,如果有我也想知道怎么排的。如果好辩真想排友纳缺,那茄戚你这个结构设计得太复杂了。
MongoDB分页获取数据排序阶段缓存溢出问题
查询语法如下庆郑:
报错信息如下:
1、 扩大排序内存的限制,例如扩大10倍至320M。如:
2、 给排序字段加索引。如:
3、 在执行一厅差指个更大规模排序时,即使已经加了索引依然超过限制,可以使用aggregate()方法的 allowDiskUse 参数设置将数据写到临时文件进扮配行排序。如:
[img]关于mongodb排序和mongodb排序分页非常慢的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。