在Mongodb聚合管道中的$ project和$ match之后总是需要$ sort吗?

时间:2016-08-02 09:39:13

标签: php mongodb aggregation-framework

我有一个工作聚合调用,执行$ project,$ match和$ sort(由_id),它完全正常。

为了优化我的应用程序,我尝试在最后删除$ sort部分,因为我实际上在返回游标函数后在我的php应用程序中按日期时间字符串进行排序。因此,我不再希望按_id排序。

但是,当我删除管道的这一部分时,它不返回任何数据。这是我打电话的必要部分吗?

  $pipeline = [
    ['$project' => [
      'date' => '$date',
      'time' => '$time',
      'datetime' => '$datetime',
      'dev_id' => '$dev_id'
      ],
    ],
    ['$match' => [
      'dev_id' => ['$in' => $deviceIdArray],
      'datetime' => ['$gte' => $this->dateFrom, '$lte' => $this->dateTo]],
    ],
    ['$sort' => ['_id' => -1],
    ],
  ];

1 个答案:

答案 0 :(得分:0)

首先你正在做project然后做match,所以你没有得到任何结果作为输出。

请尝试以下代码: -

 $pipeline = [
 ['$match' => [
  'dev_id' => ['$in' => $deviceIdArray],
  'datetime' => ['$gte' => $this->dateFrom, '$lte' => $this->dateTo]],
]
['$project' => [
  'date' => '$date',
  'time' => '$time',
  'datetime' => '$datetime',
  'dev_id' => '$dev_id'
  ],
]
];