如何在get response中对NeDB数据库进行排序?(Javascript回调/箭头函数语法混乱)



我有一个express服务器和一个简单的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:无法读取未定义的属性"sort":

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((函数中,但在这一点上,我完全不知所措,我相信我只是不理解语法。我已经找到了排序的例子,但在这种情况下没有。

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

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

最新更新