Bonjour,

Je fais des requêtes en PHP vers des collections Mongo, donc certaines contiennent des $in $and $or...
Or je rencontre, sur une collection assez conséquente (> 2 millions d'entrées), un problème depuis ce matin (hier le code passait, ce qui me fait dire que j'ai surement dépassé un nombre d'entrées critique, ou je m'y prend mal dans ma requête).

Voici l'erreur, et le code correspondant :

Fatal error: Uncaught exception 'MongoException' with message 'Cannot run command count(): exception: $or/$and/$nor entries need to be full objects' in C:\www\monitoring\admin\statistiques\generer.php:58 Stack trace: #0 C:\www\monitoring\admin\statistiques\generer.php(58): MongoCursor->count() #1 {main} thrown in C:\www\monitoring\admin\statistiques\generer.php on line 58
code des lignes 56 à 59 (comprenant donc la ligne 58 en question dans l'erreur) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
if ( $db == 'referentielULDev' AND $collection == 'monitoring' ) {
	$resultat = $coll->find(array('$and' => array( $type, array('date' => array( '$gt' => $timestamp_debut, '$lt' => $timestamp_fin )))));
	$nb_entrees_range = var_dump($resultat->count());
}
Je rencontre le même problème en remplaçant var_dump($resultat->count()) par $resultat->count() directement.

D'après le message, il s'agit du count() qui ne sait pas gérer le type de données que lui retourne la requête, or cela fonctionnait (et fonctionne toujours) avec des collections comprenant moins d'entrées.

Si vous avez un avis sur la question, sinon je devrais bidouiller un traitement "par lot", en découpant la période de requête, mais cela est un peu frustrant, pour une structure de données (Mongo) qui privilégie la disponibilité (nosql), au détriment de l'intégrité (sql). Ou peut être cela vient quand même de PHP ?

Merci par avance pour vos retours :-)

NB : Je précise que dans la requête la variable $type est identifiée.