聚合框架按空白排序日期问题

时间:2015-05-27 20:35:56

标签: mongodb sorting aggregation-framework

我使用MongoDB中的聚合框架按日期字段对结果集进行排序。除了排序字段中包含空白日期的记录之外,排序工作正常。如何将这些空白移动到排序结果集合的末尾,同时为具有日期的那些保留最早的最新排序顺序?

query.where('state','published').sort('startDate');

1 个答案:

答案 0 :(得分:0)

假设我的收藏中有以下文件:

{ "_id" : ObjectId("55669d58d70a9b1a45e11ed5"), "state" : "published", "startDate" : "Thu May 28 2015 07:45:12 GMT+0300" }
{ "_id" : ObjectId("55669d62d70a9b1a45e11ed6"), "state" : "published", "startDate" : "     " }
{ "_id" : ObjectId("55669d67d70a9b1a45e11ed7"), "state" : "published", "startDate" : "" }
{ "_id" : ObjectId("55669d6ad70a9b1a45e11ed8"), "state" : "published", "startDate" : "Thu May 28 2015 07:45:30 GMT+0300" }
{ "_id" : ObjectId("55669ec4d70a9b1a45e11ed9"), "state" : "published" }

您可以使用$regex

过滤包含空白日期的文档
db.test.aggregate([{"$match": {"state": "published", "startDate": /\S+/}}, {$sort: {"startDate": 1}}])

输出:

{ "_id" : ObjectId("55669d58d70a9b1a45e11ed5"), "state" : "published", "startDate" : "Thu May 28 2015 07:45:12 GMT+0300" }
{ "_id" : ObjectId("55669d6ad70a9b1a45e11ed8"), "state" : "published", "startDate" : "Thu May 28 2015 07:45:30 GMT+0300" }

编辑:

如果按startDate降序排列文档,则会得到预期的结果。

db.test.aggregate(
    [
        { "$match": { "state": "published" }}, 
        { $sort: { "startDate": -1 }}
    ]
)