2011-08-08 4 views
1

J'essaie de voir comment faire une commande geoNear sans réécrire le projet doctrine-mongodb. J'ai regardé les fichiers Expr.php et Builder.php et je n'ai trouvé aucune référence à la commande geoNear, comment puis-je obtenir cette fonctionnalité dans mon ODM Doctrine MongoDB?Doctrine MongoDB geoNear

merci

Répondre

0

Quel âge a votre version de bibliothèque?

Il existe une implémentation de la commande geoNear disponible sur Doctrine MongoDb mappers's trunk, $qb->near(array($x, $y)). Mais l'ai testé très rapidement, je ne peux pas vous dire à quel point cela fonctionne bien dans un usage intensif.

1

La version RECENTS DoctrineODM a la méthode geoNear: See the code

Cependant, gardez à l'esprit que geoNear est vraiment une entaille faite pour Foursquare par l'équipe MongoDB. Il ne retourne que les 100 premiers résultats ordonnés par la distance (et vous ne pouvez pas paginer)

utilisation $ près de la place: $near Doc for Mongo 2.2

$query->field('coordinates') 
     ->equals(array('$near' => array($lat, $lon) 
        , '$maxDistance' => $maxDistanceKm/111)); 

Avertissement: $ près changé en 2.4 Mongo , maintenant il renvoie seulement les 100 premiers éléments aussi: $near Doc for Mongo 2.4


Si vous n'avez pas besoin de trier par la distance, utilisez $geoWithin (ou $within à Mongo 2.2), vous pouvez trier par d'autres champs et paginer:

$query->field('coordinates') 
     ->equals(array('$within' => array('$center' => array(array($lat, $lon) 
             , $maxDistanceKm/111)))); 
+0

vous ne pouvez pas paginer (limite) avec 'near' de $? –

+1

La dernière fois que j'ai vérifié: non. Avec Mongo plus récent, utilisez le framework agrégé, mais considérez que beaucoup d'opérations sont effectuées en mémoire, et donc limité à 16Mb de résultats – Madarco

Questions connexes