【发布时间】:2015-05-27 20:35:55
【问题描述】:
我正在使用 MongoDB 中的聚合框架按日期字段对结果集进行排序。除了排序字段中具有空白日期的记录外,排序工作正常。如何将这些空白移到已排序结果集合的末尾,同时为带日期的空白保持最早到最新的排序顺序?
query.where('state','published').sort('startDate');
【问题讨论】:
标签: mongodb sorting aggregation-framework
我正在使用 MongoDB 中的聚合框架按日期字段对结果集进行排序。除了排序字段中具有空白日期的记录外,排序工作正常。如何将这些空白移到已排序结果集合的末尾,同时为带日期的空白保持最早到最新的排序顺序?
query.where('state','published').sort('startDate');
【问题讨论】:
标签: mongodb sorting aggregation-framework
假设我的收藏中有以下文档:
{ "_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 }}
]
)
【讨论】: