在mongodb中按多个字段排序

时间:2015-01-26 21:31:52

标签: mongodb sorting

我们说文档中有两个字段updatedAtcreatedAt。但是,如果文档尚未更新,则该文档不一定必须包含updatedAt字段。

我想按这两个字段排序,基本上将这两个字段合并到另一个字段someField中并执行

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

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

首先按createdAt排序然后再更新。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

  • 对我的createdAt
  • 进行排序
  • 表示具有相同createdAt的所有字段,按updatedAt
  • 排序

然后以下内容将起作用:

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

我不确定你为什么需要将这两个字段合并到另一个字段