J'utilise un aggregate
dans MongoDB
avec PHP
. Le code ressemble à:Agrégat MongoDB avec PHP - groupe par date
$results = $c->aggregate(array(
array(
'$project' => array(
'day' => array('$dayOfYear' => '$executed')
),
),
array(
'$group' => array(
'_id' => array('day' => '$day'),
'count' => array('$sum' => 1)
),
),
array(
'$sort' => array(
'_id' => 1
),
),
array(
'$limit' => 30
)
));
Le problème avec cela, est que $dayOfYear
ne trie pas correctement, car il trie 2 puis 3 puis 345, 346 ... Je dois être à jour ascendante. Donc, fondamentalement, au lieu de simplement faire $dayOfYear
j'ai besoin de quelque chose comme $year-$month-$dayOfMonth
.
Malheureusement, cela ne fonctionne pas. Des idées?
Merci.
Merci qui a parfaitement fonctionné. Est-il possible au niveau MongoDB d'inclure des jours avec 0 ligne. Fondamentalement, je veux afficher les 30 derniers jours, mais ce qui précède renvoie 30 lignes, mais pas les 30 derniers jours. – Justin
@Justin Bonne question cependant pas de ce que je connais encore en raison de compter sur la date des lignes pour remplir réellement les lignes. Je crois que vous devrez faire ce côté client actuellement. – Sammaye
@Sammaye - J'ai suggéré et éditer dans le code ci-dessus. Votre code actuel tel qu'il est .i.e. '' $ sort '=> [' _id '=> 1] 'ne le trierait que par jour et aboutirait à une commande comme suit -' 1/10/2015, 2/10/2015, 4/9/2015, 09/06/2015 ... et ainsi de suite. – ShalomSam