2012-11-25 5 views
0

-je utiliser MongoDB pour enregistrer les données temporelles et spatiales, et l'élément de document est structuré comme suit:comment faire face à une requête compliquée dans mongodb?

doc = { time:t, 
     geo:[x,y] 
     } 

Si les différents de deux documents sont définis comme:

dist(doc1, doc2) = |t1-t2| + |x1-x2| + |y1 - y2| 

Comment puis-je interroger les documents par mongodb et trier les résultats par leur distance à un document donné doc0 = {temps: t0, geo: [x0, y0]}?

grâce

+0

Vous pouvez utiliser le [cadre d'agrégation] (http://docs.mongodb.org/manual/applications/agrégation/) pour une requête complexe comme celle-ci. Voir les '$ add' et' $ subtract' [opérateurs de projection arithmétique] (http://docs.mongodb.org/manual/reference/aggregation/#arithmetic-operators). – JohnnyHK

Répondre

1

Au lieu de calculer la distance manuellement, vous pouvez faire confiance mongodb cette tâche. Mongodb a built in geospatial query support.

Cela ressemblerait à ceci:

db.docs.find({ 
    "time": "t0", 
    "geo" : { $near : [x0,y0] } 
}).limit(20) 

Le résultat serait tous les documents à proximité du lieu donné [x0,y0] automatiquement en ordre de distance à ce point.

Questions connexes