0

我有一个集合“日志”,我需要先按最近的对其进行排序。我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)也给出相同的输出顺序

4

1 回答 1

4

对于你想要做的事情,你应该简单地使用:

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",

是顶级文件。

于 2018-12-02T22:56:51.150 回答