编辑:Asya在下面回答,更新为工作代码。
我正在使用Lambda和Node.js在AWS中构建一个无服务器的应用程序。我目前在mLab有一个MongoDB。我正试图获得最新的"基于ISODate字符串记录。使用findOne()或find w / limit 1,它每次都返回相同的记录(不是最新的记录)。
我的测试表中有2条记录,如下所示:
{ "field1": "myField", "versionTimestamp": "2017-06-13T18:33:06.223Z" }
{ "field1": "myField", "versionTimestamp": "2017-12-13T18:33:06.223Z" }
无论我做什么,它总是从第6次返回
col.findOne(q, { "sort": [['versionTimestamp', 'desc']] }, function (err, doc) {
db.close();
if (err) {
sendErrorResponse("500", "Unable to query DB", err);
}
else {
if (doc) {
console.log(doc);
callback(null, doc.invoiceDocument);
}
else {
sendErrorResponse("404", "Record Not Found", "No records found that match those parameters.");
}
}
});
或限制1
col.find(q, { "limit": 1, "sort": [['versionTimestamp', 'desc']] }).toArray(function (err, docs) {
db.close();
if (err) {
sendErrorResponse("500", "Unable to query DB", err);
}
else {
if (docs) {
console.log(docs[0]);
callback(null, docs[0].invoiceDocument);
}
else {
sendErrorResponse("404", "Record Not Found", "No records found that match those parameters.");
}
}
});
答案 0 :(得分:1)
Model.findOne
没有方法sort
。但您可以使用Model.find
,按日期排序(升序或降序),然后使用limit
方法将返回值限制为1:
col.find(q).sort(versionTimestamp: -1).limit(1).exec();
此处,sort
是方法,而不是方法find
的参数,如q
。
希望它有所帮助,
最好的问候,
答案 1 :(得分:1)
Asya找到了它!这是排序选项中格式错误的数组:
sort采用排序首选项数组,默认为'asc'。我 猜测你想要另一组数组括号:[['field','desc'] ] - Asya Kamsky昨天