2016-08-02 30 views
0

我有一个工作的聚合调用,执行$ project,$ match和$ sort(by _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], 
    ], 
    ]; 

回答

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' 
    ], 
] 
];