2015-02-10 14 views
6

Tôi đang làm việc trên các tài liệu sau đâylàm thế nào để sử dụng chức năng tổng hợp trong thiên thạch

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

Tôi muốn nhận được kết quả của tôi như sau

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

khi iam sử dụng lệnh sau đây trong Mongo shell nó cung cấp cho sản lượng yêu cầu của tôi

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

nhưng khi tôi sử dụng cùng trong tổng hợp ứng dụng sao băng không hoạt động ...... vì vậy tôi có thể làm tương tự bằng cách sử dụng phương thức find or findOne ............. hoặc nếu có bất kỳ khả năng nào để sử dụng hàm tổng hợp trong ứng dụng sao băng của tôi ....

+0

Tại thời điểm này tôi n thời gian tôi muốn khuyên bạn nên http://github.com/JcBernack/meteor-reactive-aggregate, nó làm việc thực sự tốt cho tôi và đã có một cam kết trong tuần qua – Rohmer

Trả lời

1

Bạn cần để thêm một gói để lộ các aggregate tính năng:

meteor add monbro:mongodb-mapreduce-aggregation

Sau đó, bạn có thể sử dụng các mã như bình thường:

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

var result = MyCollection.aggregate(pipeline); 

Chỉ cần một vài điều cần lưu ý, điều này hoạt động tốt nhất trên phía máy chủ . Để tài liệu sử dụng nó ở phía máy khách, cần có một nhánh của gói, hãy kiểm tra tài liệu của gói: https://atmospherejs.com/monbro/mongodb-mapreduce-aggregation

+0

hi akshat khi tôi thêm gói monbro: mongodb-mapreduce- tổng hợp ứng dụng của tôi bị lỗi ..... –

+0

@GopalRao bạn có thể cung cấp nhật ký sự cố không? – Akshat

+1

Lỗi: Phương thức có tên '/ __ dummy __/insert' đã được xác định tại gói/ddp/livedata_server.js: 1444 tại Hàm ._. Mỗi ._. ForEach (packages/underscore/underscore.js: 113) tại _.extend .methods (gói/ddp/livedata_server.js: 1442) tại Mongo.Collection._define MutationMethods (gói/mongo/collection.js: 884) tại Mongo.Collection mới (gói/mongo/collection.js: 208) tại Gói (gói/monbro: mongodb-mapreduce-aggregatio/server.coffee: 7: 24) tại gói/monbro: mongodb-mapreduce-aggregation/server.coffee: 1 –

2

Đây là những gì tôi đã cố gắng bằng tay và làm việc cho tôi:

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; 

Đọc về nhiều Meteor.wrapAsync here

Các vấn đề liên quan