我使用MongoDB中的聚合框架按日期字段对结果集进行排序。除了排序字段中包含空白日期的记录之外,排序工作正常。如何将这些空白移动到排序结果集合的末尾,同时为具有日期的那些保留最早的最新排序顺序?
query.where('state','published').sort('startDate');
答案 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 }}
]
)