在节点中对mongodb客户端findOne()进行排序

时间:2017-06-13 20:40:59

标签: node.js mongodb mongodb-query

编辑: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.");
                    }
                }
            });

2 个答案:

答案 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昨天