当前位置: 首页 > 知识库问答 >
问题:

mongodb驱动程序和Mongoose:可能存在多种限制?

费承载
2023-03-14

我可以多次限制查找结果的数量吗?

原因是我现在向现有应用程序的结果添加了一个排序选项。我已经限制了分页的结果集,但是如果我另外排序,首先必须对整个结果进行排序,然后跳过/限制结果。

我不关心100%准确的结果,但不想让数据库太忙。所以我正在尝试的是:

MyCollection.find(pattern).limit(somelargenumber).sort({score:desc}).skip(0).limit(10);
 db.books.find().limit(1).sort({weightedRating:-1}).limit(10);

共有1个答案

桓宜
2023-03-14

我可以多次限制查找结果的数量吗?

不。如果你做了

db.test.find(query).limit(1).sort(sort).limit(10)

那么使用.limit所完成的全部工作就是将限制设置为10。

db.test.find({ "a" : 22 }).sort({ "b" : -1 })

很难理解您在寻找什么,但听起来您只想对查询返回的第一个n结果进行排序,而不是对给定排序返回查询的第一个n结果。可以使用聚合框架:

db.test.aggregate([
    { "$match" : query },
    { "$limit" : limit },
    { "$sort" : sort }
])

这将根据排序查询限制结果进行排序。它不会返回由顺序sort确定的第一个limit结果匹配查询;它返回限制匹配查询的文档,按排序排序,但不能保证这些匹配的文档如何符合所有匹配排序的结果的总体顺序。这将为查询使用索引(如果有的话),并且如果限制相对较小(例如<100),排序将不昂贵。

如果有人以某种方式选择了所有文档,我希望防止错误的响应时间,在这种情况下不准确的结果是可以的

 类似资料:
  • 驱动程序版本为: 我的问题是,当我使用api find和一些来自java的过滤器时,操作需要15秒。 我检查了mongo服务器日志文件,发现跟踪是一个命令,而不是一个查询: 2015-09-01T12:11:47.496+0200I命令[conn503]命令b.$CMD命令:计数{count:“logs”,查询:{timestamp:{$GTE:新日期(1433109600000)},aplica

  • 问题内容: 我想对MongoDB驱动程序作出承诺。我写了以下代码: 您是否知道为什么在调用该方法时为什么没有输出: 问题答案: 手动散布API是很危险的,我建议采取以下措施: 有了Bluebird的承诺,它看起来就像:

  • 问题内容: 我们当前的连接配置如下所示: 并且已在当前版本(源代码)中弃用,并将被删除:“此方法无法替代。使用connectTimeout属性控制连接超时。” 我认为重试和连接超时是两回事。有谁知道为什么改变了它以及它有什么(内部)含义? 问题答案: 关于autoConnectRetry的含义有很多困惑。大多数人认为这意味着,如果操作由于IOException而失败,驱动程序将重试该操作,直到ma

  • 我正在尝试使用MongoDBJava驱动程序作为聚合命令的一部分创建查询。目前我允许日期范围或特定日期数组作为参数。例如 日期范围查询工作正常,我解析xml并将其转换为在mongo中生成以下查询的DBObject; 对于指定日期,我只想返回在给定日期的00:00:00.000和第二天的00:00:00.000之间发生的结果。根据我对mongo查询的基本了解,我希望做一个类似于日期范围的$匹配,但是

  • 我正在尝试将Java程序连接到远程Oracle数据库。在网上做了一些研究之后,我决定最简单的方法是使用Oracle JDBC驱动程序。我下载并运行了jar文件,得到了消息“****JCE UNLIMITED STRENGTH已安装*****”问题是,当我尝试将驱动程序添加到我的类路径(javac-classpath ojdbc8.jar Connect.java)时,我不断收到一条错误消息,说“包

  • 服务器上的mongodb版本将比驱动程序版本旧。我的java驱动程序版本是3.6,Mongo-版本显示我是2.4 我该怎么解决这个问题?