如何对 NeDB 数据库进行排序以获取响应? (Javascript 回调/箭头函数语法混乱)

Posted

技术标签:

【中文标题】如何对 NeDB 数据库进行排序以获取响应? (Javascript 回调/箭头函数语法混乱)【英文标题】:How to sort NeDB database in get response? (Javascript callback/arrow function syntax confusion) 【发布时间】:2020-07-13 20:03:08 【问题描述】:

我有一个快速服务器和一个简单的 NeDB 数据库。我可以像这样成功获取整个数据库:

app.get('/api', (request, response) => 
  //queuery the database for everything
  db
    .find(, (error, data) => 
        if (error) 
          response.end();
          console.log(error)
          return;
        
      console.log(data)
      response.json(data)
    )

但我注意到,由于某种原因,结果与数据库文件的顺序不同。我想按其中一个时间戳排序。数据库如下所示:

...
"lat":1,"lon":7,"timestamp":1585781054239,"_id":"3cZvJfQyLEXK0SZo","createdAt":"$$date":1585781054240,"updatedAt":"$$date":1585781054240
"lat":1,"lon":2,"timestamp":1585781047536,"_id":"DN9bpd1FygEowgtc","createdAt":"$$date":1585781047538,"updatedAt":"$$date":1585781047538
"lat":1,"lon":6,"timestamp":1585781052398,"_id":"Dzp6x0xo3QM960Rm","createdAt":"$$date":1585781052400,"updatedAt":"$$date":1585781052400
"lat":1,"lon":5,"timestamp":1585781051174,"_id":"KswtMYzV2QBE3xkb","createdAt":"$$date":1585781051176,"updatedAt":"$$date":1585781051176
...

诚然,我还没有完全理解回调在这段代码中是如何工作的。我尝试过类似以下的操作,但它向客户端返回 500 GET 错误,并向服务器返回“TypeError: Cannot read property 'sort' of undefined”:

app.get('/api', (request, response) => 
  //queuery the database for everything
  db
    .find(, (error, data) => 
        if (error) 
          response.end();
          console.log(error)
          return;
        
      // console.log(data)
      // response.json(data)
    )
    .sort( createdAt: -1 , (data) => 
    console.log(data)
    response.json(data)
  );
);

我想知道它是否应该嵌套在 .find() 函数中,但此时我完全无法理解,我相信我只是不理解语法。我找到了排序的例子,但不是在这种情况下。

【问题讨论】:

【参考方案1】:

你可以写这样的东西来通过时间戳对其进行排序:

database.find().sort("timestamp":-1).exec(function(err, data) 
    if (err) 
        response.end();
        return;
    
    console.log(data);
);

【讨论】:

以上是关于如何对 NeDB 数据库进行排序以获取响应? (Javascript 回调/箭头函数语法混乱)的主要内容,如果未能解决你的问题,请参考以下文章

加速 NeDB 中的数组插入

如何对从 AJAX 请求中获取的响应进行排序并将它们作为 <option> 映射到 <select> 标记?

nedb:如何从 find() 函数中获取文档?

如何对每对之间的差异求和,然后使用 nedb 对每对的结果求和

如何使用 NodeJS 仅将 NeDB 数据库中的某些字段存储到数组中

在java中如何给数据进行大小排序