Mongoose排序,升序和$存在

Mah*_*zat 6 sorting mongoose mongodb

我想知道在mongoose中是否有一种方法可以在某个字段上按升序对一个集合进行排序查询,该字段也会对该字段进行排序$exist.我的意思是下面的查询排序像我想要的但是把文件track.nextRun放在数组的顶部 db.Task.find().sort({ 'track.nextRun': 1 }) 我不希望文件track.nextRun在数组的底部没有.

Pan*_*war 1

您可以在此处使用聚合。所以,你有一个名为 的集合task

任务表数据

| id              | track                    |
| --------------- | ------------------------ |
| someid_1        | { "nextRun" : 10 }       |
| someid_2        | {  }                     |
| someid_3        | { "nextRun" : 3 }        |
Run Code Online (Sandbox Code Playgroud)

现在,根据您的要求,输出应该是-

| id           | track              |
| ------------ | ------------------ |
|  someid_3    | { "nextRun" : 3 }  |
|  someid_1    | { "nextRun" : 10 } |
|  someid_2    | {  }               |
Run Code Online (Sandbox Code Playgroud)

MongoDB查询

db.getCollection('Task').aggregate([
{
    $project: {
      _id: 1,
      track: 1,
      nextRunExists: {
        $cond: [
          {
              $ifNull: ["$track.nextRun", false]},
          1,
          0
        ]
      }
    }
}, 
{
    $sort: {
        nextRunExists: -1,
        track: 1
    }
}])
Run Code Online (Sandbox Code Playgroud)