【问题标题】:How to sort a collection by date in MongoDB?如何在 MongoDB 中按日期对集合进行排序?
【发布时间】:2012-11-30 15:06:54
【问题描述】:

我正在使用带有 Node.JS 的 MongoDB。我有一个包含日期和其他行的集合。日期是一个 JavaScript Date 对象。

我如何按日期排序这个集合?

【问题讨论】:

  • simple , collection.find().sort({datefield: 1}, function(err, cursor){...});或者你也可以使用 collection.find().sort({datefield: -1}, function(err, cursor){...});
  • 请注意,您可能不需要date 列:stackoverflow.com/questions/5125521/…

标签: node.js mongodb


【解决方案1】:

按日期排序不需要任何特殊操作。只需按集合的所需日期字段排序即可。

针对 1.4.28 的 node.js 原生驱动进行了更新,您可以使用以下任一方式对 datefield 进行升序排序:

collection.find().sort({datefield: 1}).toArray(function(err, docs) {...});
collection.find().sort('datefield', 1).toArray(function(err, docs) {...});
collection.find().sort([['datefield', 1]]).toArray(function(err, docs) {...});
collection.find({}, {sort: {datefield: 1}}).toArray(function(err, docs) {...});
collection.find({}, {sort: [['datefield', 1]]}).toArray(function(err, docs) {...});

'asc''ascending' 也可以用来代替1

要降序排序,请使用'desc''descending'-1 代替1

【讨论】:

  • 我在用户名字段上应用上述解决方案,它工作正常但区分大小写如何忽略它?
  • 多路正确答案 (y)
【解决方案2】:

对@JohnnyHK 的回答稍作修改

collection.find().sort({datefield: -1}, function(err, cursor){...});

在许多用例中,我们希望返回最新记录(例如最新更新/插入)。

【讨论】:

  • 你打算在函数中加入什么?在 2.6.3 上,仅尝试对没有函数的 Date 对象进行排序不适合我。
  • @SamBrightman 该函数只是一个回调。无论您想对查询结果做什么,都可以将该逻辑放在回调中。您可以阅读有关什么是回调以及它们如何工作以学习基于事件的编程的更多信息。
  • 当然,我知道什么是回调。我只在问题中看到了排序要求,所有答案都给出了回调。同时,排序对我不起作用,所以我想也许你必须在函数中做额外的工作。
  • @SamBrightman 哦,好的。为方便起见,您可以像 collection.find().sort(...).exec(function(err, cursor) {}) 一样显式链接
  • 它说 sort() 只需要 1 个参数
【解决方案3】:

Sushant Gupta 的答案有点过时,不再有效。

下面的sn-p现在应该是这样的:

collection.find({}, {"sort" : ['datefield', 'asc']} ).toArray(function(err,docs) {});

【讨论】:

  • @JohnnyHK Sweet。我不记得确切的场景,但去年夏天我试图让这种类型与 Sushant 的 sn-p 一起工作,但它对我不起作用。也许是因为它缺少toArray 部分。
  • 这实际上是一个错误的答案,它在 node.js 中给出了错误的结果
【解决方案4】:

附加方形 [ ] 需要括号才能使排序参数起作用。

collection.find({}, {"sort" : [['datefield', 'asc']]} ).toArray(function(err,docs) {});

【讨论】:

    【解决方案5】:

    这对我有用:

    collection.find({}, {"sort" : [['datefield', 'asc']]}, function (err, docs) { ... });
    

    使用 Node.js、Express.js 和 Monk

    【讨论】:

      【解决方案6】:

      如果你的日期格式是这样的:14/02/1989 ---->你可能会发现一些问题

      你需要像这样使用 ISOdate:

      var start_date = new Date(2012, 07, x, x, x); 
      

      -----> 结果 ------>ISODate("2012-07-14T08:14:00.201Z")

      现在只需使用这样的查询:

       collection.find( { query : query ,$orderby :{start_date : -1}} ,function (err, cursor) {...}
      

      就是这样:)

      【讨论】:

        【解决方案7】:

        使用 mongoose 就这么简单:

        collection.find().sort('-date').exec(function(err, collectionItems) {
          // here's your code
        })
        

        【讨论】:

          【解决方案8】:
          collection.find().sort('date':1).exec(function(err, doc) {});
          

          这对我有用

          转介https://docs.mongodb.org/getting-started/node/query/

          【讨论】:

            【解决方案9】:
            db.getCollection('').find({}).sort({_id:-1}) 
            

            这将根据插入日期按降序对您的收藏集进行排序

            【讨论】:

              【解决方案10】:

              使用 mongoose,我无法使用“toArray”,并且出现错误:TypeError: Collection.find(...).sort(...).toArray is not a function. toArray 函数存在于来自 Native MongoDB NodeJS 驱动程序 (reference) 的 Cursor 类中。

              同样 sort 只接受一个参数,所以你不能在其中传递你的函数。

              这对我有用(Emil 回答):

              collection.find().sort('-date').exec(function(error, result) {
                // Your code
              })
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2010-12-09
                • 2020-03-16
                • 1970-01-01
                • 2020-07-24
                • 2016-02-01
                • 2011-07-09
                相关资源
                最近更新 更多