2015-02-10 18 views
6

sto lavorando sul seguente documentocome utilizzare la funzione di aggregazione in meteora

{ 
"_id" : 12, 
"firstName" : "wer", 
"People" : [ 
    { 
     "uuid" : "123", 
     "name" : "sugun", 
     "person" : [ 
      { 
       "uuid" : "add32", 
       "name" : "ssss" 
      }, 
      { 
       "uuid" : "fdg456", 
       "name" : "gfg" 
      } 
     ] 
    }, 
    { 
     "uuid" : "222", 
     "name" : "kiran" 
    } 
] 
} 

voglio ottenere la mia uscita come segue

{ 
"_id" : 456, 
"People" : [ 
    { 
     "uuid" : "123", 
     "name" : "sugun", 
     "person" : [ 
      { 
       "uuid" : "add32", 
       "name" : "ssss" 
      } 
     ] 
    } 
] 
} 

quando iam utilizzando seguente comando in Mongo guscio esso elasticità la mia uscita richiesta

db.people.aggregate([ 
    {$match: {_id: 12}}, 
    {$unwind: "$People"}, 
    {$unwind: "$People.person"}, 
    {$match: {"People.uuid": "123", "People.person.uuid" : "add32"}} 
]) 

ma quando iam utilizzando lo stesso nel mio meteora app aggregato non funziona ...... così posso fare lo stesso usando i metodi find o findOne ............. o se c'è qualche possibilità di utilizzare la funzione di aggregazione nella mia app meteor ....

+0

A questo punto i n tempo raccomanderei http://github.com/JcBernack/meteor-reactive-aggregate, funziona molto bene per me e ha avuto un commit nell'ultima settimana – Rohmer

risposta

1

È necessario per aggiungere un pacchetto per esporre la aggregate funzione:

meteor add monbro:mongodb-mapreduce-aggregation

quindi è possibile utilizzare il codice come normale:

var MyCollection = new Mongo.Collection('metrics'); 
var pipeline = [ 
    {$group: {_id: null, resTime: {$sum: "$resTime"}}} 
]; 

var result = MyCollection.aggregate(pipeline); 

Solo un paio di cose da notare, questo funziona meglio sul lato server . Per i documenti da utilizzare sul lato client è necessario un fork del pacchetto, controllare i documenti del pacchetto: https://atmospherejs.com/monbro/mongodb-mapreduce-aggregation

+0

hi akshat quando aggiungo il pacchetto monbro: mongodb-mapreduce- aggregazione la mia app si è bloccata ..... –

+0

@GopalRao potresti fornire i registri degli arresti anomali? – Akshat

+1

Errore: un metodo denominato '/ __ dummy __/insert' è già definito su packages/ddp/livedata_server.js: 1444 su Function ._. Each ._. ForEach (packages/underscore/underscore.js: 113) a _.extend .methods (packages/ddp/livedata_server.js: 1442) su Mongo.Collection._define MutationMethods (packages/mongo/collection.js: 884) sul nuovo Mongo.Collection (packages/mongo/collection.js: 208) su Package (pacchetti/monbro: mongodb-mapreduce-aggregatio/server.coffee: 7: 24) in pacchetti/monbro: mongodb-mapreduce-aggregation/server.coffee: 1 –

2

Ecco quello che ho provato a mano e lavorato per me:

var rawUsers = Meteor.users.rawCollection(); 
var aggregateQuery = Meteor.wrapAsync(rawUsers.aggregate, rawUsers); 
var pipeline = [ 
    {$match: {}}, 
    {$project: {username: 1, profile: 1}} 
]; 
var result = aggregateQuery(pipeline); 

return result; 

Leggi di più riguardo Meteor.wrapAsync here

Problemi correlati