Je ne trouve nulle part où cela a été documenté. Par défaut, l'opération find () récupère les enregistrements depuis le début. Comment puis-je obtenir les derniers N enregistrements dans mongodb?
Edit: je veux aussi que le résultat retourné soit ordonné du moins récent au plus récent, pas l'inverse.
Réponses:
Si je comprends votre question, vous devez trier par ordre croissant.
En supposant que vous ayez un champ id ou date appelé "x", vous feriez ...
.Trier()
Le 1 triera par ordre croissant (du plus ancien au plus récent) et -1 par ordre décroissant (du plus récent au plus ancien).
Si vous utilisez le champ _id créé automatiquement, il contient une date intégrée ... vous pouvez donc l'utiliser pour commander avant ...
Cela ramènera tous vos documents triés du plus ancien au plus récent.
Ordre naturel
Vous pouvez également utiliser un ordre naturel mentionné ci-dessus ...
Encore une fois, utilisez 1 ou -1 selon l'ordre que vous souhaitez.
Utilisez .limit ()
Enfin, il est recommandé d'ajouter une limite lors de ce type de requête grand ouvert afin que vous puissiez faire l'une ou l'autre ...
ou
la source
item = 3; item.add(3).divide(3) == 2; item.divide(3).add(3) == 4;
Sans ordre, quel serait le résultat ??? Je suis d'accord avec vous que cet ordre inversé n'est pas intuitif. Ce n'est pas du SQL après tout, il doit suivre les paradigmes OO normaux.Les N derniers enregistrements ajoutés, du moins récent au plus récent, peuvent être vus avec cette requête:
Si vous les voulez dans l'ordre inverse:
Si vous installez Mongo-Hacker, vous pouvez également utiliser:
Si vous en avez assez d'écrire ces commandes tout le temps, vous pouvez créer des fonctions personnalisées dans votre ~ / .mongorc.js. Par exemple
puis à partir d'un shell mongo il suffit de taper
last(N)
la source
db.collection.find().reverse().limit(1)
me donne l'erreur... has no method reverse
Afin d'obtenir les N derniers enregistrements, vous pouvez exécuter la requête ci-dessous:
si vous ne voulez qu'un dernier enregistrement:
Remarque: au lieu de $ natural, vous pouvez utiliser l'une des colonnes de votre collection.
la source
vous pouvez utiliser
sort()
,limit()
,skip()
pour obtenir début d'enregistrement dernier N de toute valeur sautéela source
Vous pouvez essayer cette méthode:
Obtenez le nombre total d'enregistrements dans la collection avec
Utilisez ensuite skip:
la source
Regardez sous Querying: Sorting and Natural Order, http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order ainsi que sort () sous Cursor Methods http://www.mongodb.org/display / DOCS / Advanced + Requêtes
la source
Vous ne pouvez pas "ignorer" en fonction de la taille de la collection, car elle ne tiendra pas compte des conditions de requête.
La bonne solution consiste à trier à partir du point final souhaité, à limiter la taille de l'ensemble de résultats, puis à ajuster l'ordre des résultats si nécessaire.
Voici un exemple, basé sur du code du monde réel.
la source
var query = collection.find( { conditions } ).sort({$natural : -1}).reverse().limit(N)
.@ bin-chen,
Vous pouvez utiliser une agrégation pour les n dernières entrées d'un sous-ensemble de documents dans une collection. Voici un exemple simplifié sans regroupement (ce que vous feriez entre les étapes 4 et 5 dans ce cas).
Cela renvoie les 20 dernières entrées (basées sur un champ appelé "horodatage"), triées par ordre croissant. Il projette ensuite chaque document _id, horodatage et tout_field_you_want_to_show dans les résultats.
ainsi, le résultat ressemblerait à quelque chose comme:
J'espère que cela t'aides.
la source
Le tri, le saut, etc. peuvent être assez lents en fonction de la taille de votre collection.
Une meilleure performance serait obtenue si votre collection était indexée selon certains critères; puis vous pouvez utiliser le curseur min ():
Tout d'abord, indexez votre collection avec
db.collectionName.setIndex( yourIndex )
Vous pouvez utiliser l'ordre croissant ou décroissant, ce qui est cool, car vous voulez toujours les "N derniers éléments" ... donc si vous indexez par ordre décroissant, c'est la même chose que d'obtenir les "premiers N éléments" .Ensuite, vous trouvez le premier élément de votre collection et utilisez ses valeurs de champ d'index comme critères minimum dans une recherche comme:
Voici la référence pour le curseur min (): https://docs.mongodb.com/manual/reference/method/cursor.min/
la source
db.collectionName.find().hint(yourIndex).limit(N)
Si l'index est dans l'ordre décroissant, vous obtenez les N valeurs minimales.Vous voudrez peut-être utiliser les
find
options: http://docs.meteor.com/api/collections.html#Mongo-Collection-findla source
selon la documentation de mongoDB :
la source
utiliser l' opérateur $ slice pour limiter les éléments du tableau
où la géolocalisation est un tableau de données, d'où nous obtenons les 5 derniers enregistrements.
la source
La dernière fonction devrait être
sort
, nonlimit
.Exemple:
la source
sort
aprèslimit
?