如何对这一系列结果进行排序?

时间:2015-12-18 17:51:27

标签: mongodb sorting mongodb-query

这是我的查询,它尝试根据名为expiresAt的派生字段对MongoDB文档数组进行排序。 expiresAt是一个Date对象,表示存储在doc.expirationDate中的日期字符串。

失败并显示错误TypeError: ... .sort({}) is not a function (shell):5

db.tokens.find().map(function(doc) {
    var expiryDate = new Date(doc.credentialsMap.linkedin.expirationDate);
    doc.expiresAt = expiryDate;
    return doc;
    }).sort({'expiresAt': -1});

我做错了什么?我不清楚确切的返回类型map提供了什么。如果它是光标,那么为什么不支持sort?它在docs中清晰可见。

1 个答案:

答案 0 :(得分:1)

cursor.map()返回一个Java脚本数组。

您调用sort()的方式假定返回值是MongoDB游标,这就是失败的原因。

您必须使用常规Array.sort语法。 例如,要使地图结果按降序排序,请使用以下命令:

db.tokens.find().map(function(doc) {
var expiryDate = new Date(doc.credentialsMap.linkedin.expirationDate);
doc.expiresAt = expiryDate;
return doc;
}).sort(function(a,b) { return b.expiresAt - a.expiresAt});