Phương thức aggregate() trong MongoDB

Với Aggregation trong MongoDB, bạn nên sử dụng phương thức aggregate().

Cú pháp

Cú pháp cơ bản của phương thức aggregate() là như sau:

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

Ví dụ

Trong Collection, bạn có dữ liệu sau:

{

    _id: ObjectId(7 df78ad8902c)

    title: 'MongoDB Overview',

    description: 'MongoDB is no sql database',

    by_user: 'tutorials point',

    url: 'http://www.tutorialspoint.com',

    tags: ['mongodb', 'database', 'NoSQL'],

    likes: 100

},

{

    _id: ObjectId(7 df78ad8902d)

    title: 'NoSQL Overview',

    description: 'No sql database is very fast',

    by_user: 'tutorials point',

    url: 'http://www.tutorialspoint.com',

    tags: ['mongodb', 'database', 'NoSQL'],

    likes: 10

},

{

    _id: ObjectId(7 df78ad8902e)

    title: 'Neo4j Overview',

    description: 'Neo4j is no sql database',

    by_user: 'Neo4j',

    url: 'http://www.neo4j.com',

    tags: ['neo4j', 'database', 'NoSQL'],

    likes: 750

}

Từ Collection trên, nếu bạn muốn hiển thị một danh sách có bao nhiêu bài hướng dẫn được viết bởi mỗi người dùng, thì bạn sẽ sử dụng phương thức aggregate() như sau:

> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])

{

"result" : [

{

"_id" : "tutorials point",

"num_tutorial" : 2

},

{

"_id" : "Neo4j",

"num_tutorial" : 1

}

],

"ok" : 1

}

>

Truy vấn SQL tương đương cho trường hợp trên là select by_user, count(*) from mycol group by by_user.

Trong ví dụ trên, chúng ta đã nhóm các Document bởi trường by_user và trên mỗi lần xuất hiện của by_user, giá trị trước đó của tổng sẽ được tăng lên. Có một danh sách các biểu thức Aggregation có sẵn, được liệt kê dưới đây:

Biểu thức

Miêu tả

Ví dụ

$sum

Tổng giá trị được xác định từ tất cả Document trong Collection đó

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])

$avg

Tính trung bình của tất cả giá trị đã cho từ tất cả Document trong Collection đó

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])

$min

Lấy giá trị nhỏ nhất của các giá trị từ tất cả Document trong Collection đó

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])

$max

Lấy giá trị lớn nhất của các giá trị từ tất cả Document trong Collection đó

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])

$push

Chèn giá trị vào trong một mảng trong Document kết quả

db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])

$addToSet

Chèn giá trị tới một mảng trong Document kết quả, nhưng không tạo các bản sao

db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])

$first

Lấy Document đầu tiên từ Source Document theo nhóm

db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])

$last

Lấy Document cuối cùng từ Source Document theo nhóm

db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

Last updated