2016-02-03 16 views
10

Tôi đang cố gắng để có được số lượng từ khóa cùng với parentId, categioryIdllcId. db của tôi là

{ 
    "_id" : ObjectId("5673f5b1e4b0822f6f0a5b89"), 
    "keyword" : "electronic content management system", 
    "llcId" : "CL1K9B", 
    "categoryId" : "CL1K8V", 
    "parentId" : "CL1K8V", 

} 

tôi đã cố gắng $project với $group

db.keyword.aggregate([ 
    { 
     $group: { 
      _id: "$llcId", 
      total: {$sum: 1}, 
     } 
    }, 
    { 
     $project: { 
      categoryId: 1, total: 1 
     } 
    } 
]) 

Và nó mang lại cho tôi một kết quả như

{ "_id" : "CL1KJQ", "total" : 17 } 
{ "_id" : "CL1KKW", "total" : 30 } 

Nhưng tôi cần dữ liệu thực tế trong kết quả cũng ví dụ llcId, categoryId, keyword, total. Tôi đã cố gắng hiển thị cetgoryId và từ khóa bằng cách sử dụng $project nhưng chỉ hiển thị _id và tổng số. Những gì tôi đang mất tích?

+0

u có thể viết kết quả mẫu mà bạn yêu cầu –

+0

Đường ống tập hợp của bạn sẽ trả về số lượng tài liệu cho mỗi giá trị 'llcId'. Đó là điều bạn muốn? – dgiugg

Trả lời

12

Để có được số lượng keyword bạn cần vào nhóm tài liệu theo lĩnh vực keyword, sau đó sử dụng các nhà điều hành ắc $sum để có được những tài liệu đếm. Đối với các giá trị trường khác, vì bạn nhóm tất cả tài liệu theo giá trị từ khóa, tốt nhất bạn có thể làm để có được các trường khác là sử dụng toán tử $first trả về giá trị từ tài liệu đầu tiên cho mỗi nhóm. Nếu không, bạn có thể phải sử dụng toán tử $push để trả lại một mảng của các giá trị trường đối với từng nhóm:

var pipeline = [ 
    { 
     "$group": { 
      "_id": "$keyword", 
      "total": { "$sum": 1 }, 
      "llcId": { "$first": "$llcId"}, 
      "categoryId": { "$first": "$categoryId"}, 
      "parentId": { "$first": "$parentId"} 
     } 
    } 
]; 

db.keyword.aggregate(pipeline) 
+0

làm cách nào tôi có thể hiển thị dữ liệu toán tử đẩy $ bằng cách sử dụng angularjs ng-repeat – SrividhyaShama

1

Bạn đang nhóm bởi llcId vì vậy nó sẽ cung cấp cho nhiều hơn một categoryId mỗi llcId. Nếu bạn muốn categoryId như trong kết quả của bạn, bạn phải viết rằng trong truy vấn nhóm của bạn. Ví dụ:

db.keyword.aggregate([ 
{ 
    $group: { 
     _id: "$llcId", 
     total: {$sum: 1}, 
     categoryId:{$max:"$categoryId"} 
    } 

}, 
{ 
    $project: { 
     categoryId: 1, total: 1 
    } 
}]) 
Các vấn đề liên quan