NodeJS + MongoDB-find()。sort()。toArray()不起作用

时间:2018-12-02 22:16:08

标签: node.js mongodb

我有一个收藏集“ logs”,我需要按照最新的顺序对其进行排序。使用findOne(),我可以做到:

.sort($natural: -1)

但是现在什么也没做。

  db('logs').find({'userId': userId}).sort({ $natural: -1}).toArray(function (err, result) {
    if (err) console.error(err)
    if (result.length > 0) {
      console.log('Found ' + result.length + ' log entries', result)
      if (callback) callback(result)
    } else {
      console.log('No log entries for ' + userId, userId)
      if (callback) callback(null)
    }
  })

这与$natural: 1输出相同。或者,如果我一起跳过sort()

收藏:

{_id: "5c044d13f4c6db53a047fe37", dateTime: "2018-12-02 22:22", userId: 5, event: "Failed to update Media Package sale", info: {userId: 5, AmountOfPrePaidItems: 1}}
{_id: "5c044d2bf4c6db53a047fe38", dateTime: "2018-12-02 22:22", userId: 5, event: "Failed to update Media Package sale", info: {userId: 5, AmountOfPrePaidItems: 0}}
{_id: "5c044d56f4c6db53a047fe39", dateTime: "2018-12-02 22:23", userId: 5, event: "Failed to update Media Package sale", info: {userId: 5, AmountOfPrePaidItems: 1}}

使用Atlas mongoDB 4.0.4

修改1: .sort( _id: -1)的输出顺序也相同

1 个答案:

答案 0 :(得分:1)

对于您要尝试执行的操作,只需使用:

db('logs').find({'userId': userId}).sort({ _id: -1 })

如果您想获取最近的日期,因为_id包含日期等。

$natural而言:

  

$ natural参数根据项目的自然顺序返回项目   在数据库中。此排序是内部实现   功能,您不应依赖其中的任何特定结构   它。

使用示例数据:

db.getCollection('items').find().sort({ _id: -1}) 

您得到:

/* 1 */
{
    "_id" : "5c044d56f4c6db53a047fe39",
    "dateTime" : "2018-12-02 22:23",
    "userId" : 5,
    "event" : "Failed to update Media Package sale",
    "info" : {
        "userId" : 5,
        "AmountOfPrePaidItems" : 1
    }
}

/* 2 */
{
    "_id" : "5c044d2bf4c6db53a047fe38",
    "dateTime" : "2018-12-02 22:22",
    "userId" : 5,
    "event" : "Failed to update Media Package sale",
    "info" : {
        "userId" : 5,
        "AmountOfPrePaidItems" : 0
    }
}

/* 3 */
{
    "_id" : "5c044d13f4c6db53a047fe37",
    "dateTime" : "2018-12-02 22:22",
    "userId" : 5,
    "event" : "Failed to update Media Package sale",
    "info" : {
        "userId" : 5,
        "AmountOfPrePaidItems" : 1
    }
}

请注意,首要文档是:

"_id" : "5c044d56f4c6db53a047fe39",
"dateTime" : "2018-12-02 22:23",

正在做:

db.getCollection('items').find().sort({ _id: 1})

注意:

"_id" : "5c044d13f4c6db53a047fe37",
"dateTime" : "2018-12-02 22:22",

是头号文件。