2010-12-15 136 views
2

Est-il possible de trier les valeurs de date de MongoDB avec une granularité? Je voudrais commander mes résultats par date, mais je ne me soucie pas des données heure/minute/seconde. Je préférerais ne pas avoir à stocker un paramètre supplémentaire comme '20101215'.granularité dans un tri par date MongoDB?

+1

Si vous ne vous en souciez pas, pourquoi est-ce important si vous utilisez la date complète lors du tri? Les résultats sont toujours triés par Date quand ils sont triés par DateTime sûrement. –

+1

@Hightechrider Le cas d'utilisation concerne un site d'information. Je stocke les heures de création et de mise à jour pour les nouvelles, mais la page d'accueil du site doit être triée par jour (c.-à-d. 2010-12-17), puis par d'autres facteurs. Si je trier par horodatage exact, tous les autres facteurs sont sans signification, car chaque élément a une heure/minute/seconde différente dans cette date. En MySQL, je ferais quelque chose comme 'ORDER BY DATE (created), priority'. – ceejayoz

Répondre

1

La réponse courte à votre question est "Non". Ce n'est pas possible sans stocker un autre champ. Même si c'était possible, vous ne voudriez pas b/c en triant dans Mongo vous avez vraiment besoin d'indexer les champs que vous triez, sinon le DB aura besoin de scanner chaque document dans la base de données pour faire le tri. Donc, si vous deviez faire ce que vous suggérez, vous auriez aussi besoin d'indexer sur le champ de la date partielle, ce qui n'est pas possible non plus dans Mongo.

Je pense que la meilleure approche serait de stocker 2 champs, un pour l'année/mois/jour et un autre pour l'heure/min/s. Ensuite, vous aurez plus de flexibilité avec le tri et l'indexation. Ce n'est pas aussi propre ou idéal que vous voudriez probablement, mais c'est la seule option avec le db.

L'autre option serait d'affiner la commande dans votre application après que les résultats reviennent.