2011-07-27 25 views
19

Tôi đã xây dựng truy vấn tôi muốn trong trình bao nhưng gặp sự cố khi viết nó trong Mongoose.Nhóm (Bằng) ở Mongoose?

db.commentstreams.group({ key: { page_id: true }, reduce: function(obj,prev) { prev.num_comments += obj.num_comments }, initial: { num_comments: 0 } }) 

Tôi hơi bối rối bởi cú pháp Mongoose; có lẽ ai đó có thể làm sáng tỏ điều này. Cảm ơn rất nhiều.

+1

câu chuyện về cuộc đời tôi. – weisjohn

Trả lời

14

Theo this post:

Model.find({}, [fields], {'group': 'FIELD'}, function(err, logs) { 
     ... 
}); 

Thật không may, chúng tôi dường như thiếu tài liệu hướng dẫn cho thế này.

+1

Điều này dường như không hoạt động - nó trả về tất cả tài liệu khi thực hiện tìm kiếm trống. –

+1

$ nhóm thay vì nhóm? –

13

MapReduce phải là cách phù hợp để thực hiện nhưng nếu bạn không sharding và truy vấn của bạn sẽ không cho kết quả trong hơn 10 nghìn bản ghi.

Bạn có thể truy cập vào bất kỳ chức năng nút-MongoDB bản địa thông qua moongoose, vì vậy nó trông như thế này:

var group = { 
    key: {}, 
    cond: {item_id: item_id}, 
    reduce: function(doc, out) { 
     out.count++; 
     out.total += doc.value; 
    }, 
    initial: { 
     total: 0, 
     count: 0 
    }, 
    finalize: function(out) { 
     out.avg = out.total/out.count; 
    } 
}; 

Item.collection.group(group.key, group.cond, group.initial, group.reduce, group.finalize, true, function(err, results) { 
    console.log('group results %j', results); 
}); 

nút-MongoDB bản địa source: https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/collection.js#L1165

MongoDB nhóm doc: http://www.mongodb.org/display/DOCS/Aggregation#Aggregation-Group

0

nếu bạn đang cố gắng sử dụng Mongoose để nhóm có thể bạn nên xem qua điều này Mongoose group query in node.js/express route

Có vẻ như nhóm không được hỗ trợ bởi Mongoose trong khi tổng hợp là.