【问题标题】:How to sort a mongodb query result in ascending order of age, without a createdAt field? (new to old)如何在没有 createdAt 字段的情况下按年龄升序对 mongodb 查询结果进行排序? (新到旧)
【发布时间】:2019-02-03 00:20:18
【问题描述】:

当您执行 mongodb 查询时,通常会按年龄降序(从旧到新)获取结果。我怎样才能按升序获得它?

我知道我可以保存 createdAt 时间戳并做一个

  .sort({createdAt:-1})

关于执行此操作的查询,但是当信息已经存在于 _id 中时单独保存 cretedAt 时间戳似乎有点过头了。

有没有办法在不使用 createdAt 时间戳的情况下按年龄升序(从新到旧)获取结果?

【问题讨论】:

  • 你是什么意思“信息已经存在于_id”?在每个文档上保存 createdAt 属性有什么问题?您可以通过 _id 属性进行排序,但它不如具有可读日期那么干净。如果没有日期字段,您将很难进行时间驱动的查询。

标签: node.js mongodb sorting mongoose


【解决方案1】:

时间戳已存储在_id 字段中。因此,如果您想将文档从新到旧排序。您可以通过以下方式进行 -

sort({_id:-1})

【讨论】:

    【解决方案2】:

    如果您指的是反映文档插入顺序的自然顺序

    考虑以下查询:

    db.trees.insert( { _id: 1, name: "oak"} )
    db.trees.insert( { _id: 2, name: "chestnut"} )
    db.trees.insert( { _id: 3, name: "maple"} )
    db.trees.insert( { _id: 4, name: "birch"} )
    

    以下查询按自然顺序返回文档:

    db.trees.find().sort( { $natural: 1 } )
    
    [
     { "_id" : 1, "name" : "oak"}
     { "_id" : 2, "name" : "chestnut"}
     { "_id" : 3, "name" : "maple"}
     { "_id" : 4, "name" : "birch"}
    ]
    

    但是删除操作会释放空间,然后新插入的文档会占用这些空间,文档的自然顺序不会反映插入顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-23
      • 2017-12-31
      • 1970-01-01
      • 2022-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多