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

如何让Mongo在限制结果之前对集合进行排序?

楚洋
2023-03-14

我想从集合中选择最新的文档。这个问题的答案是mongodb:如何获取最后的N个记录?表明查询中的操作顺序很重要。然而,情况似乎并非如此(可能是在Mongo 2.4发布之后)。我尝试了以下两种查询,似乎Mongo首先应用了限制,然后执行排序。

查询1

myCollection.find().sort( { '$date': 1 }).limit(50, callback);

问题2

myCollection.find().limit(50).sort( { '$date': 1 }, callback);

告诉mongo先排序后限制的正确查询是什么?

编辑---这是一个样本文件从收集

{
  _id: ObjectId("517eb0dddbab79c74700005d"),
  audioFiles: [
    {
      audioFileName: "C64FEFA8-DD43-40A1-8996-35948F3438BF-6896-0000027BD4A59D91",
      audioLanguage: "English",
      date: ISODate("2013-05-21T16:23:04.006Z"),
      flag: "1",
      user: "36C4DEB6-C13D-4211-94B5-CC4DD993ECF1-6896-00000278FA7B08EC"
    },
    {
      audioFileName: "994B6DF6-73B5-458F-912A-FF67A84534B2-23532-0000020000000000",
      audioLanguage: "English",
      date: ISODate("2013-05-27T10:45:04.107Z"),
      flag: "1",
      user: "9D7BB3F4-371B-4F2A-8DA2-0C4CE8B4E16D-974-0000000000000000"
    }
  ],
  date: ISODate("2013-04-29T17:41:49.101Z"),
  imageFileName: "SteamLokomotive0498",
  random: 0.6750695831142366,
  thumbFileName: "SteamLokomotive0498_150x150",
  user: "62923D8E-00CE-4F0C-AECA-3010D78FC9CE-226-0000000000000000",
  userLanguagePref: "Cantonese"
}

共有2个答案

薛兴言
2023-03-14

我在使用限制时遇到了麻烦,不得不删除之前的$:

MyCollection.find({ "exampleQuery._id": "exampleId123xx }, { $sort: { requestDate: -1 }, limit: 3 });

袁波
2023-03-14

问题是您需要按日期排序,而不是按$date排序。

js prettyprint-override">myCollection.find().sort({date: 1}).limit(50, callback);

Mongo在限制结果之前应用排序,而不管您在光标上调用sortlimit

文档中的证明:链接

db.bios.find().sort( { name: 1 } ).limit( 5 )
db.bios.find().limit( 5 ).sort( { name: 1 } )

这两种说法是等价的;i、 e.limit()和sort()方法的链接顺序并不重要。这两条语句都返回前五个文档,由“name”的升序顺序决定。

 类似资料:
  • 我有一个MongoDB集合,它有1000万个数据。我有两个主要字段(字符串类型)和(整数类型)。这两个字段都已编入索引,但是当我在 find 语句之后对结果进行排序时,mongo 需要花费大量时间来返回结果。 如何从find语句中快速排序结果?

  • 问题内容: Python通过按顺序查看元组的元素来对元组列表进行排序。由于集合是无序的,Python如何对集合列表进行排序? 编辑:帖子中的问题和可接受的答案较为笼统,给出的文件也很深入。我的问题不是重复的。 问题答案: 无论列表中有什么内容,元素的方法都是唯一参考的比较方法。对于集合,意味着“是”的适当子集,不足以定义总顺序。这就是为什么结果通常是不确定的。可能是原始列表的任何排列,与实现恰好适

  • 我目前有一个查询,它使用MongoTemplate的findAll()方法返回集合中的所有文档。我想对这些结果进行排序,但看不到任何方法。我看到我可以使用find()和一个查询参数并调用。with(Sort Sort),但是在这个场景中,我如何设置查询以返回所有文档?我会同意使用任何一种方法。

  • 我试图写一个函数来排序一个对象集合。由于对象都是相同的类型(相同的用户定义类),因此它们的属性集是相同的。是否有可能(通过代码)发现对象的属性,以便将集合放在一个二维数组中,每行代表一个对象,每列代表它的一个属性? 另一种解决方案是将集合中的每个对象复制到对象数组中,并根据它们的一个属性对它们进行排序,该属性的名称作为字符串传递给函数。但是我不知道如何使用作为字符串传递的属性名来指向对象的属性。

  • 问题内容: 我将MongoDB与Node.JS结合使用。我有一个包含日期和其他行的集合。日期是一个JavaScript 对象。 如何按日期排序此收藏集? 问题答案: 只需对@JohnnyHK答案进行一些修改 在许多用例中,我们希望返回最新记录(例如最新更新/插入)。

  • 我不熟悉Mongo中的聚合查询,并且一直在努力产生我想要的输出。我有以下聚合查询: 返回以下结果: 如何修改聚合查询,以便只返回2个文档而不是3个文档?将两个“ABC-123”结果合并为一个结果,并使用带有“bu”和“count”字段的新计数数组,即。 非常感谢