我想为sort
子句添加一个字段,仅适用于一天前创建的那些文档。
假设在我的收藏集mycollection
中,我的文档有一个字段publishDate
和其他一些字段,下面是我的查询:
db.getCollection('mycollection').aggregate([
{
"$match": {
"expireDate": {
"$gte": ISODate("2019-03-14T00:00:00.000Z")
},
"publishDate": {
"$lt": ISODate("2019-03-15T00:00:00.000Z")
},
"isPublished": true,
"isDrafted": false,
"deletedAt": {
"$eq": null
},
"deleted": false,
"blocked": {
"$exists": false
}
}
},
{
"$sort": {
"isFeatured": -1, // What I want is to add this field in sort clause by condition, when publishDate is yesterday, otherwise ignore it
"refreshes.refreshAt": -1,
"publishDate": -1,
"_id": -1
}
},
{
"$skip": 0
},
{
"$limit": 12
},
{
"$project": {
"position": 1
}
}])
答案 0 :(得分:3)
创建一个虚拟字段,该字段表示应显示在列表顶部的条目的值,然后根据该字段对条目进行排序。您可以使用$addFields
和$cond
运算符来完成它。
实现将是这样的:
// ...
{
"$addField": {
"isFeaturedSort": {
"$cond": {
"if": {
"$and": {
"publishDate": {
"$gte": ISODate("2019-03-14T00:00:00.000Z"),
},
"$eq": ["isFeatured", true],
},
},
"then": 1,
"else": 0,
},
},
},
},
{
"$sort": {
"isFeaturedSort": -1, // changed
"refreshes.refreshAt": -1,
"publishDate": -1,
"_id": -1,
},
},
// ...
请注意,$addField
仅在MongoDB 3.4及更高版本中有效。
代码段中也可能包含错误。