J'ai vu des questions similaires mais loin de complexes pour un débutant comme moi. De plus, aucune des réponses n'a offert de syntaxe.Agrégation utilisant Project et Slice, mongodb
Ma base de données:
name :"Kim"
points: [
{ category:"Purchase",
points: -50},
{ category: "Wage",
points : 275},
{ category: "Purchase",
points: -40}
]
name :"Meghan"
points: [
{ category:"Contest",
points: 130},
{ category: "Purchase",
points : -25},
{ category: "Games",
points : 50}
]
]
Ainsi dans le shell mongo je suis en train de le faire trouver tous les points.category qui équivaut à « Achat », mais seulement me revenir au dernier. J'ai essayé d'y parvenir en utilisant aggregate, $ project et $ tranche. Mon problème est que je ne comprends pas assez la syntaxe pour savoir si $ slice va dans $ project ou à l'extérieur séparé par une virgule. Je comprends la syntaxe quand j'utilise $ project par lui-même ou $ tranche par lui-même mais je n'ai aucune idée de comment utiliser toutes ces choses ensemble pour quelque chose de magique. Si quelqu'un pouvait m'aider à résoudre mon problème et à expliquer comment combiner correctement toutes ces choses, je serais toujours redevable. J'ai lu les docs mais rien ne m'a montré comment utiliser tout à la fois.
Je veux rechercher l'étudiant dont le nom est Kim points pour trouver le dernier achat qu'elle a fait. Le résultat que je veux est [{points: -40}]
La partie que vous manque, vous devez [ 'filter' $] (https://docs.mongodb.com/manual/reference/operator/aggregation/filter/) le contenu du tableau pour' "Achat "' first ** before ** vous appliquez '$ slice' ou même [' $ arrayElemAt'] (https://docs.mongodb.com/manual/reference/operator/aggregation/arrayElemAt/) pour obtenir le * * dernier ** élément. Donc '$ filter' retourne le tableau avec juste ces éléments. Envelopper cette instruction avec '$ slice' et' -1' pour l'index retourne le "dernier" de ce tableau "filtré". –
Voir [Récupérer uniquement l'élément interrogé dans un tableau d'objets de la collection MongoDB] (https://stackoverflow.com/q/3985214/2313887), par exemple l'utilisation de '$ filter' en plus de la documentation liée. –
Ok, j'ai trouvé ceci: 'db.students.agrgregate ([{$ project: {points: {$ filter: {entrée:" $ points ", comme:" pts ", cond: {$ eq: [" $ $ pts.category "," Purchase "]}}}}}]). pretty()' Le problème est qu'il renvoie les achats de chaque étudiant. Comment puis-je faire revenir juste kims et où puis-je mettre la tranche pour obtenir seulement le dernier achat. –