2015-02-10 3 views
6

pracuję na poniższym dokumenciejak korzystać z funkcji zagregowanego w meteor

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

chcę, aby moje wyjście następująco

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

kiedy iam stosując następujące polecenie w Mongo shell dać moja wymagane wyjście

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

ale kiedy iam używając samo w moim app meteorów kruszywa nie działa ...... czy mogę zrobić to samo za pomocą metody find lub findOne ............. lub jeśli istnieje jakakolwiek możliwość wykorzystania funkcji agregującej w mojej meteorowej aplikacji ...

+0

w tym momencie n czas polecam http://github.com/JcBernack/meteor-reactive-aggregate, działa to bardzo dobrze dla mnie i miał commit w zeszłym tygodniu – Rohmer

Odpowiedz

1

Potrzebujesz aby dodać pakiet aby odsłonić aggregate cechę:

meteor add monbro:mongodb-mapreduce-aggregation

Następnie można użyć kodu jak normalny:

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

var result = MyCollection.aggregate(pipeline); 

tylko kilka rzeczy, aby pamiętać, działa to najlepiej po stronie serwera . Aby dokumenty mogły go używać po stronie klienta, potrzebny jest widelec pakietu, sprawdź dokumentację pakietu: https://atmospherejs.com/monbro/mongodb-mapreduce-aggregation

+0

hi akshat kiedy dodam pakiet monbro: mongodb-mapreduce- agregacja moja aplikacja została rozbita ..... –

+0

@GopalRao możesz dostarczyć dzienniki awarii? – Akshat

+1

Błąd: Metoda o nazwie "/ __ dummy __/insert" jest już zdefiniowana w pakietach/ddp/livedata_server.js: 1444 w Function ._. Each ._. ForEach (packages/underscore/underscore.js: 113) at _.extend .methods (packages/ddp/livedata_server.js: 1442) na Mongo.Collection._define MutationMethods (packages/mongo/collection.js: 884) w nowym Mongo.Collection (packages/mongo/collection.js: 208) at Package (packages/monbro: mongodb-mapreduce-aggregatio/server.coffee: 7: 24) w pakietach/monbro: mongodb-mapreduce-aggregation/server.coffee: 1 –

2

Oto co próbowałem ręcznie i pracował dla mnie:

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; 

Więcej o Meteor.wrapAsync here