2015-01-26 2930 views
0

假设文档中有两个字段updatedAtcreatedAt。但是,如果文档尚未更新,则文档不必具有updatedAt字段。在mongodb中按多个字段排序

我想通过这些字段进行排序,本质上是两个字段合并到像someField另一个领域,做

db.stuff.find({}, {sort: {someField: -1}});

我想说的是,目前的组成排序 db.stuff.find({}, {sort: {createdAt: -1, updatedAt: -1}});

将按先创建然后更新进行排序。

回答

0

您可以使用聚合方法进行排序,项目等,如果你只是在寻找以下内容:由

  • 排序我createdAt
  • 具有相同createdAt各个领域,排序updatedAt

那么下面的工作:

db.stuff.aggregate(
    [ 
    { $sort : { createdAt : -1, updatedAt: -1 } } 
    ] 
) 

我不是苏re为什么您需要将两个字段合并到另一个字段中

+1

我相信OP想要列出最近创建或更新的项目。因此,如果某个项目是昨天创建的,但在5分钟前编辑过,它应该与5分钟前创建(或更新)的项目一起显示,而不是昨天在同一时间创建的其他项目。 – NoOutlet 2015-01-26 22:20:03

2

您可以使用聚合管道创建两个字段的条件合并,其中$project$ifNull

db.stuff.aggregate([ 
    { $project: 
    { createdOrUpdatedAt: { $ifNull: ["$updatedAt", "$createdAt"] }, 
     fieldA: 1, 
     fieldB: 1, 
     fieldEtc: 1 } 
    }, 
    { $sort: { createdOrUpdatedAt: -1 } } 
]); 
+0

是否有没有使用聚合做到这一点? – Maaz 2015-01-26 23:03:38

+1

据我所知,没有比创建一个新的领域,并给它在文档创建和文档更新currentTime时间戳之外。 – NoOutlet 2015-01-26 23:08:54