Bonjour,

J'ai un soucis avec le fonction aggregate de node js, j'aimerais utiliser ce tableau:

{
    "_id" : "MRbCLifaZ76jC368Z",
    "name" : "blablabla",
    "type" : 1,
    "users" : [ 
        {
            "id" : "RARbvfCv5qpf3tRsP",
            "amount" : 3
        }, 
        {
            "id" : "rGsnFMtWsFD9dZ5vD",
            "amount" : 2.0000000000000000
        },
        ....
    ]
},
....

Et j'aimerais choper le tableau complet et seulement les infos de l'utilsateur de mon choix, du style:

{
    "_id" : "MRbCLifaZ76jC368Z",
    "name" : "blablabla",
    "type" : 1,
    "users" : [ 
        {
            "id" : "RARbvfCv5qpf3tRsP",
            "amount" : 3
        },
    ]
},
....

J'ai donc essayé:

db.find({}, {_id: 0, users: {$elemMatch: {id: "RARbvfCv5qpf3tRsP"}}})

Mais ça ne fonctionne pas, ça retourne les tableaux avec tous les utilisateurs

J'ai cherché un peu et j'ai trouve la fonction aggregate, j'ai donc essayé ça:

db.aggregate([
    {$match: {"users.id": "bvR2jA4XorptSKmKn"}},
    {$project: {
        users: { $filter: {
            input: '$users',
            as: 'user',
            cond: {$eq: ['$$user.id', 'bvR2jA4XorptSKmKn']}
        }},
        _id: 0
    }}
])

Mais ça ne me revois rien du tout

J'aimerais avoir un petit coup de pouce si quelqu'un connais la fonction,

Merci !

6 réponses


Salut,

Aggregate n'est pas ne fonction NodeJS mais de MongoDB.

Sinon, tu as regardé la doc : http://mongodb.github.io/node-mongodb-native/2.0/tutorials/aggregation/ ? Il y a pelle d'exemples, tu devrais pouvoir t'en sortir avec non ? :)

joxs
Auteur

Merci de vos réponses,

Oui c'est une fonction MongoDB, que j'utilise avec meteor qui ne prend pas nativement aggregate en charge, j'utilise donc le package meteorhacks:aggregate pour meteor.

Meteor intègre donc nativement MongoDB, je ne pense pas avoir besoin de mongoose si ?

ca serais un plus mongoose, ca facilite vraiment la vie un ORM

joxs
Auteur

L'objectif de de l'utilisation de aggregate dans mon cas serais de fluidifier l'application, il est possible qu'il y ait plus de 100 users et j'aimerais donc selectionner directement le bon user avec MongoDB.

Mais mongoose semble ralentir la chose: http://stackoverflow.com/questions/28044938/does-mongoose-still-have-reactivity-issues-with-meteor

As-tu une idée de ce qui pourrais fonctionner avec mongoose ?

ha effectivement, je ne savais pas pour mongoose et meteor, du coup je ne serais pas d'une grande utilité sur ce thread, je n'ai jamais utilisé meteor. Désolé @joxs

joxs
Auteur

Pas de soucis, merci quand meme !