Đếm MongoDB tổng hợp

Tóm lược. trong hướng dẫn này, bạn sẽ học cách sử dụng MongoDB

{ $sum: 1 }

Code language: PHP (php)
05 để trả về số lượng tài liệu trong một nhóm

Giới thiệu về MongoDB $count

MongoDB

{ $sum: 1 }

Code language: PHP (php)
05 trả về số lượng tài liệu trong một nhóm. Đây là cú pháp của

{ $sum: 1 }

Code language: PHP (php)
05

{ $count: {} }

Code language: PHP (php)

Lưu ý rằng

{ $sum: 1 }

Code language: PHP (php)
05 không chấp nhận bất kỳ tham số nào

{ $sum: 1 }

Code language: PHP (php)
05 có chức năng tương đương với việc sử dụng

{ $sum: 1 }

Code language: PHP (php)
2 sau trong giai đoạn

{ $sum: 1 }

Code language: PHP (php)
3

{ $sum: 1 }

Code language: PHP (php)

MongoDB $count ví dụ

Chúng tôi sẽ sử dụng bộ sưu tập

{ $sum: 1 }

Code language: PHP (php)
4 sau đây để chứng minh

{ $sum: 1 }

Code language: PHP (php)
05

db.sales.insertMany([ { "_id" : 1, "item" : "Americanos", "price" : 5, "size": "Short", "quantity" : 22, "date" : ISODate("2022-01-15T08:00:00Z") }, { "_id" : 2, "item" : "Cappuccino", "price" : 6, "size": "Short","quantity" : 12, "date" : ISODate("2022-01-16T09:00:00Z") }, { "_id" : 3, "item" : "Lattes", "price" : 15, "size": "Grande","quantity" : 25, "date" : ISODate("2022-01-16T09:05:00Z") }, { "_id" : 4, "item" : "Mochas", "price" : 25,"size": "Tall", "quantity" : 11, "date" : ISODate("2022-02-17T08:00:00Z") }, { "_id" : 5, "item" : "Americanos", "price" : 10, "size": "Grande","quantity" : 12, "date" : ISODate("2022-02-18T21:06:00Z") }, { "_id" : 6, "item" : "Cappuccino", "price" : 7, "size": "Tall","quantity" : 20, "date" : ISODate("2022-02-20T10:07:00Z") }, { "_id" : 7, "item" : "Lattes", "price" : 25,"size": "Tall", "quantity" : 30, "date" : ISODate("2022-02-21T10:08:00Z") }, { "_id" : 8, "item" : "Americanos", "price" : 10, "size": "Grande","quantity" : 21, "date" : ISODate("2022-02-22T14:09:00Z") }, { "_id" : 9, "item" : "Cappuccino", "price" : 10, "size": "Grande","quantity" : 17, "date" : ISODate("2022-02-23T14:09:00Z") }, { "_id" : 10, "item" : "Americanos", "price" : 8, "size": "Tall","quantity" : 15, "date" : ISODate("2022-02-25T14:09:00Z")} ]);

Code language: JavaScript (javascript)

1) Sử dụng MongoDB $count để đếm số lượng tài liệu cho mỗi nhóm ví dụ

Ví dụ sau sử dụng

{ $sum: 1 }

Code language: PHP (php)
05 để tính số lượng tài liệu trên mỗi mục và trả về mục có số lượng lớn hơn hai

Khi bạn bắt đầu làm việc với MongoDB, thông thường bạn sẽ sử dụng lệnh

use 3tdb
db.universities.insert([
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'USAL',
  location : {
    type : 'Point',
    coordinates : [ -5.6722512,17, 40.9607792 ]
  },
  students : [
    { year : 2014, number : 24774 },
    { year : 2015, number : 23166 },
    { year : 2016, number : 21913 },
    { year : 2017, number : 21715 }
  ]
},
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'UPSA',
  location : {
    type : 'Point',
    coordinates : [ -5.6691191,17, 40.9631732 ]
  },
  students : [
    { year : 2014, number : 4788 },
    { year : 2015, number : 4821 },
    { year : 2016, number : 6550 },
    { year : 2017, number : 6125 }
  ]
}
])
4 cho nhiều loại truy vấn. Tuy nhiên, ngay khi các truy vấn của bạn nâng cao hơn, bạn sẽ cần biết thêm về tập hợp MongoDB

Trong bài viết này, tôi sẽ giải thích các nguyên tắc chính của việc xây dựng các truy vấn tổng hợp trong MongoDB và cách tận dụng các chỉ mục để tăng tốc chúng

Hơn nữa, tôi sẽ giới thiệu các giai đoạn quan trọng nhất của quy trình tổng hợp với các ví dụ ngắn sử dụng từng giai đoạn và cách áp dụng chúng vào quy trình

Tập hợp trong MongoDB là gì?

Tập hợp là một cách xử lý một số lượng lớn tài liệu trong một bộ sưu tập bằng cách chuyển chúng qua các giai đoạn khác nhau. Các giai đoạn tạo nên cái được gọi là đường ống dẫn. Các giai đoạn trong quy trình có thể lọc, sắp xếp, nhóm, định hình lại và sửa đổi các tài liệu đi qua quy trình

Một trong những trường hợp sử dụng phổ biến nhất của Tổng hợp là tính toán các giá trị tổng hợp cho các nhóm tài liệu. Điều này tương tự như phép tổng hợp cơ bản có sẵn trong SQL với mệnh đề GROUP BY và các hàm COUNT, SUM và AVG. Mặc dù vậy, Tập hợp MongoDB còn tiến xa hơn và cũng có thể thực hiện các phép nối giống như quan hệ, định hình lại tài liệu, tạo mới và cập nhật các bộ sưu tập hiện có, v.v.  

Mặc dù có các phương pháp khác để lấy dữ liệu tổng hợp trong MongoDB, nhưng khung tổng hợp là phương pháp được đề xuất cho hầu hết công việc

Có những phương pháp được gọi là phương pháp có mục đích duy nhất như

use 3tdb
db.universities.insert([
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'USAL',
  location : {
    type : 'Point',
    coordinates : [ -5.6722512,17, 40.9607792 ]
  },
  students : [
    { year : 2014, number : 24774 },
    { year : 2015, number : 23166 },
    { year : 2016, number : 21913 },
    { year : 2017, number : 21715 }
  ]
},
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'UPSA',
  location : {
    type : 'Point',
    coordinates : [ -5.6691191,17, 40.9631732 ]
  },
  students : [
    { year : 2014, number : 4788 },
    { year : 2015, number : 4821 },
    { year : 2016, number : 6550 },
    { year : 2017, number : 6125 }
  ]
}
])
5, 
use 3tdb
db.universities.insert([
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'USAL',
  location : {
    type : 'Point',
    coordinates : [ -5.6722512,17, 40.9607792 ]
  },
  students : [
    { year : 2014, number : 24774 },
    { year : 2015, number : 23166 },
    { year : 2016, number : 21913 },
    { year : 2017, number : 21715 }
  ]
},
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'UPSA',
  location : {
    type : 'Point',
    coordinates : [ -5.6691191,17, 40.9631732 ]
  },
  students : [
    { year : 2014, number : 4788 },
    { year : 2015, number : 4821 },
    { year : 2016, number : 6550 },
    { year : 2017, number : 6125 }
  ]
}
])
6 và
use 3tdb
db.universities.insert([
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'USAL',
  location : {
    type : 'Point',
    coordinates : [ -5.6722512,17, 40.9607792 ]
  },
  students : [
    { year : 2014, number : 24774 },
    { year : 2015, number : 23166 },
    { year : 2016, number : 21913 },
    { year : 2017, number : 21715 }
  ]
},
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'UPSA',
  location : {
    type : 'Point',
    coordinates : [ -5.6691191,17, 40.9631732 ]
  },
  students : [
    { year : 2014, number : 4788 },
    { year : 2015, number : 4821 },
    { year : 2016, number : 6550 },
    { year : 2017, number : 6125 }
  ]
}
])
7 được thêm vào truy vấn
use 3tdb
db.universities.insert([
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'USAL',
  location : {
    type : 'Point',
    coordinates : [ -5.6722512,17, 40.9607792 ]
  },
  students : [
    { year : 2014, number : 24774 },
    { year : 2015, number : 23166 },
    { year : 2016, number : 21913 },
    { year : 2017, number : 21715 }
  ]
},
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'UPSA',
  location : {
    type : 'Point',
    coordinates : [ -5.6691191,17, 40.9631732 ]
  },
  students : [
    { year : 2014, number : 4788 },
    { year : 2015, number : 4821 },
    { year : 2016, number : 6550 },
    { year : 2017, number : 6125 }
  ]
}
])
4 để sử dụng nhanh chóng nhưng bị giới hạn về phạm vi

Map-reduce framework trên MongoDB là tiền thân của aggregation framework và phức tạp hơn nhiều để sử dụng. MongoDB không còn được dùng nữa

Đường dẫn tổng hợp MongoDB hoạt động như thế nào?

Đây là một sơ đồ để minh họa một đường dẫn tổng hợp MongoDB điển hình

Đếm MongoDB tổng hợp
  • Giai đoạn
    use 3tdb
    db.universities.insert([
    {
      country : 'Spain',
      city : 'Salamanca',
      name : 'USAL',
      location : {
        type : 'Point',
        coordinates : [ -5.6722512,17, 40.9607792 ]
      },
      students : [
        { year : 2014, number : 24774 },
        { year : 2015, number : 23166 },
        { year : 2016, number : 21913 },
        { year : 2017, number : 21715 }
      ]
    },
    {
      country : 'Spain',
      city : 'Salamanca',
      name : 'UPSA',
      location : {
        type : 'Point',
        coordinates : [ -5.6691191,17, 40.9631732 ]
      },
      students : [
        { year : 2014, number : 4788 },
        { year : 2015, number : 4821 },
        { year : 2016, number : 6550 },
        { year : 2017, number : 6125 }
      ]
    }
    ])
    9 – lọc những tài liệu chúng ta cần làm việc, những tài liệu phù hợp với nhu cầu của chúng ta
  • Giai đoạn

    { $sum: 1 }

    Code language: PHP (php)
    20 – thực hiện công việc tổng hợp
  • Giai đoạn

    { $sum: 1 }

    Code language: PHP (php)
    21 – sắp xếp tài liệu kết quả theo cách chúng tôi yêu cầu (tăng dần hoặc giảm dần)

Đầu vào của quy trình có thể là một bộ sưu tập duy nhất, trong đó các bộ sưu tập khác có thể được hợp nhất sau đó trong quy trình

Sau đó, quy trình thực hiện các chuyển đổi liên tiếp trên dữ liệu cho đến khi đạt được mục tiêu của chúng tôi

Bằng cách này, chúng tôi có thể chia một truy vấn phức tạp thành các giai đoạn dễ dàng hơn, trong mỗi giai đoạn đó chúng tôi hoàn thành một thao tác khác nhau trên dữ liệu. Vì vậy, khi kết thúc quy trình truy vấn, chúng tôi sẽ đạt được tất cả những gì chúng tôi muốn

Cách tiếp cận này cho phép chúng tôi kiểm tra xem truy vấn của chúng tôi có hoạt động bình thường ở mọi giai đoạn hay không bằng cách kiểm tra cả đầu vào và đầu ra của nó. Đầu ra của mỗi giai đoạn sẽ là đầu vào của giai đoạn tiếp theo

Các công cụ như Studio 3T cho phép bạn kiểm tra đầu vào và đầu ra của giai đoạn khi bạn tạo truy vấn tổng hợp của mình

Tải xuống Studio 3T miễn phí cho Mac, Windows hoặc Linux

Không có giới hạn về số giai đoạn được sử dụng trong truy vấn hoặc cách chúng tôi kết hợp chúng

Để đạt được hiệu suất truy vấn tối ưu, có một số phương pháp hay nhất cần tính đến. Chúng ta sẽ đến với những điều đó sau trong bài viết

Cú pháp đường ống tổng hợp MongoDB

Đây là một ví dụ về cách tạo truy vấn tổng hợp

{ $sum: 1 }

Code language: PHP (php)
22,

  • trong đó collectionName – là tên của một bộ sưu tập,
  • đường ống - là một mảng chứa các giai đoạn tổng hợp,
  • tùy chọn - tham số tùy chọn cho tập hợp

Đây là một ví dụ về cú pháp đường ống tổng hợp

{ $sum: 1 }

Code language: PHP (php)
5

Giới hạn giai đoạn tổng hợp MongoDB

Tổng hợp hoạt động trong bộ nhớ. Mỗi giai đoạn có thể sử dụng tối đa 100 MB RAM. Bạn sẽ gặp lỗi từ cơ sở dữ liệu nếu vượt quá giới hạn này

Nếu nó trở thành sự cố không thể tránh khỏi, bạn có thể chọn chuyển trang sang đĩa, với nhược điểm duy nhất là bạn sẽ đợi lâu hơn một chút vì nó hoạt động chậm hơn trên đĩa hơn là trong bộ nhớ. Để chọn phương thức chuyển trang vào đĩa, bạn chỉ cần đặt tùy chọn

{ $sum: 1 }

Code language: PHP (php)
23 thành đúng như thế này

{ $sum: 1 }

Code language: PHP (php)
7

Lưu ý rằng tùy chọn này không phải lúc nào cũng có sẵn các dịch vụ chia sẻ. Ví dụ: cụm Atlas M0, M2 và M5 tắt tùy chọn này

Các tài liệu được trả về bởi truy vấn tổng hợp, dưới dạng con trỏ hoặc được lưu trữ qua

{ $sum: 1 }

Code language: PHP (php)
24 trong bộ sưu tập khác, được giới hạn ở 16MB. Nghĩa là, chúng không thể lớn hơn kích thước tối đa của tài liệu MongoDB

Nếu bạn có khả năng vượt quá giới hạn này thì bạn nên chỉ định rằng đầu ra của truy vấn tổng hợp sẽ ở dạng con trỏ chứ không phải ở dạng tài liệu

Dữ liệu của chúng tôi được sử dụng cho các ví dụ tổng hợp MongoDB

Tôi sẽ hiển thị các ví dụ tổng hợp MongoDB cho các giai đoạn đường ống quan trọng nhất

Để minh họa cho các ví dụ, tôi sẽ sử dụng hai bộ sưu tập. Đầu tiên được gọi là

{ $sum: 1 }

Code language: PHP (php)
25 và được tạo thành từ các tài liệu này (dữ liệu không có thật)

{ $sum: 1 }

Code language: PHP (php)
0

Nếu bạn muốn kiểm tra các ví dụ này trên bản cài đặt của riêng mình, bạn có thể chèn chúng bằng lệnh hàng loạt bên dưới hoặc nhập nó dưới dạng tệp JSON

use 3tdb
db.universities.insert([
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'USAL',
  location : {
    type : 'Point',
    coordinates : [ -5.6722512,17, 40.9607792 ]
  },
  students : [
    { year : 2014, number : 24774 },
    { year : 2015, number : 23166 },
    { year : 2016, number : 21913 },
    { year : 2017, number : 21715 }
  ]
},
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'UPSA',
  location : {
    type : 'Point',
    coordinates : [ -5.6691191,17, 40.9631732 ]
  },
  students : [
    { year : 2014, number : 4788 },
    { year : 2015, number : 4821 },
    { year : 2016, number : 6550 },
    { year : 2017, number : 6125 }
  ]
}
])

Bộ sưu tập thứ hai và cuối cùng được gọi là

{ $sum: 1 }

Code language: PHP (php)
26 và trông như thế này

{ $sum: 1 }

Code language: PHP (php)
2

Một lần nữa, bạn có thể chèn chúng theo cách tương tự, sử dụng đoạn mã sau hoặc bằng cách nhập dưới dạng tệp JSON

{ $sum: 1 }

Code language: PHP (php)
4

Bỏ qua phần Tệp đính kèm ở cuối bài viết này, nơi bạn sẽ tìm thấy các tệp JSON có sẵn để tải xuống

Ví dụ tổng hợp MongoDB

MongoDB $match

Giai đoạn

use 3tdb
db.universities.insert([
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'USAL',
  location : {
    type : 'Point',
    coordinates : [ -5.6722512,17, 40.9607792 ]
  },
  students : [
    { year : 2014, number : 24774 },
    { year : 2015, number : 23166 },
    { year : 2016, number : 21913 },
    { year : 2017, number : 21715 }
  ]
},
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'UPSA',
  location : {
    type : 'Point',
    coordinates : [ -5.6691191,17, 40.9631732 ]
  },
  students : [
    { year : 2014, number : 4788 },
    { year : 2015, number : 4821 },
    { year : 2016, number : 6550 },
    { year : 2017, number : 6125 }
  ]
}
])
9 cho phép chúng tôi chỉ chọn những tài liệu đó từ bộ sưu tập mà chúng tôi muốn làm việc với. Nó thực hiện điều này bằng cách lọc ra những thứ không tuân theo yêu cầu của chúng tôi

Trong ví dụ sau, chúng tôi chỉ muốn làm việc với những tài liệu chỉ định rằng 

{ $sum: 1 }

Code language: PHP (php)
28 là giá trị của trường

{ $sum: 1 }

Code language: PHP (php)
29 và

{ $sum: 1 }

Code language: PHP (php)
40 là giá trị của trường

{ $sum: 1 }

Code language: PHP (php)
41

Để có được kết quả có thể đọc được, tôi sẽ thêm

{ $sum: 1 }

Code language: PHP (php)
42 vào cuối tất cả các lệnh

{ $sum: 1 }

Code language: PHP (php)
1

Đầu ra là…

{ $sum: 1 }

Code language: PHP (php)
2

Dự án $ MongoDB

Rất hiếm khi bạn cần truy xuất tất cả các trường trong tài liệu của mình. Tốt nhất là chỉ trả lại những trường bạn cần để tránh xử lý nhiều dữ liệu hơn mức cần thiết

Giai đoạn

{ $sum: 1 }

Code language: PHP (php)
43 được sử dụng để thực hiện việc này và để thêm bất kỳ trường tính toán nào mà bạn cần

Trong ví dụ này, chúng ta chỉ cần các trường

{ $sum: 1 }

Code language: PHP (php)
29,

{ $sum: 1 }

Code language: PHP (php)
41 và

{ $sum: 1 }

Code language: PHP (php)
46

Trong đoạn mã sau, xin lưu ý rằng

  • Chúng ta phải viết rõ ràng

    { $sum: 1 }

    Code language: PHP (php)
    47 khi trường này không bắt buộc
  • Ngoài trường

    { $sum: 1 }

    Code language: PHP (php)
    48, chỉ cần chỉ định những trường mà chúng tôi cần lấy do kết quả của truy vấn là đủ

Sân khấu này …

{ $sum: 1 }

Code language: PHP (php)
9

sẽ cho kết quả…

{ $sum: 1 }

Code language: PHP (php)
0

Đây là một ví dụ khác về MongoDB $project

Nhóm $ MongoDB

Với giai đoạn

{ $sum: 1 }

Code language: PHP (php)
20, chúng tôi có thể thực hiện tất cả các truy vấn tổng hợp hoặc tóm tắt mà chúng tôi cần, chẳng hạn như tìm số lượng, tổng số, trung bình hoặc tối đa

Trong ví dụ này, chúng tôi muốn biết số lượng tài liệu cho mỗi trường đại học trong bộ sưu tập ‘

{ $sum: 1 }

Code language: PHP (php)
10’ của chúng tôi

Truy vấn…

{ $sum: 1 }

Code language: PHP (php)
70

sẽ tạo ra kết quả này…

{ $sum: 1 }

Code language: PHP (php)
71

Toán tử tập hợp $group MongoDB

Giai đoạn nhóm $ hỗ trợ các biểu thức (toán tử) nhất định cho phép người dùng thực hiện các phép toán số học, mảng, boolean và các hoạt động khác như một phần của quy trình tổng hợp

OperatorMeaning$countTính toán số lượng tài liệu trong nhóm đã cho. $maxHiển thị giá trị tối đa của trường tài liệu trong bộ sưu tập. $minHiển thị giá trị tối thiểu của trường tài liệu trong bộ sưu tập. $avgHiển thị giá trị trung bình của trường tài liệu trong bộ sưu tập. $sumTổng hợp các giá trị được chỉ định của tất cả các tài liệu trong bộ sưu tập. $pushThêm các giá trị bổ sung vào mảng của tài liệu kết quả

Kiểm tra để xem các toán tử MongoDB khác và tìm hiểu thêm về chủ đề này

MongoDB $out

Đây là một loại giai đoạn khác thường vì nó cho phép bạn chuyển các kết quả tổng hợp của mình sang một bộ sưu tập mới hoặc vào một bộ sưu tập hiện có sau khi loại bỏ nó hoặc thậm chí thêm chúng vào các tài liệu hiện có (mới trong 4. 1. 2 phiên bản)

Giai đoạn

{ $sum: 1 }

Code language: PHP (php)
24 phải là giai đoạn cuối cùng trong quy trình

Lần đầu tiên, chúng tôi đang sử dụng một tập hợp có nhiều giai đoạn. Bây giờ chúng tôi có hai, một

{ $sum: 1 }

Code language: PHP (php)
20 và một

{ $sum: 1 }

Code language: PHP (php)
24

{ $sum: 1 }

Code language: PHP (php)
72

Bây giờ, chúng tôi kiểm tra nội dung của bộ sưu tập '

{ $sum: 1 }

Code language: PHP (php)
14' mới

{ $sum: 1 }

Code language: PHP (php)
73

Đây là cách chúng tôi sử dụng giai đoạn $out trong ví dụ ba phần này

Bây giờ chúng tôi đã tạo ra một tập hợp nhiều giai đoạn, chúng tôi có thể tiếp tục xây dựng một đường dẫn

MongoDB $thư giãn

Giai đoạn

{ $sum: 1 }

Code language: PHP (php)
15 trong MongoDB thường được tìm thấy trong một đường ống vì nó là phương tiện để kết thúc

Bạn không thể làm việc trực tiếp trên các phần tử của một mảng trong tài liệu có các giai đoạn như

{ $sum: 1 }

Code language: PHP (php)
20. Giai đoạn

{ $sum: 1 }

Code language: PHP (php)
15 cho phép chúng tôi làm việc với các giá trị của các trường trong một mảng

Khi có trường mảng trong tài liệu đầu vào, đôi khi bạn sẽ cần xuất tài liệu nhiều lần, một lần cho mọi phần tử của mảng đó

Mỗi bản sao của tài liệu có trường mảng được thay thế bằng phần tử kế tiếp

Trong ví dụ tiếp theo, tôi sẽ chỉ áp dụng giai đoạn cho tài liệu có trường

{ $sum: 1 }

Code language: PHP (php)
46 chứa giá trị

{ $sum: 1 }

Code language: PHP (php)
19

đây là tài liệu

{ $sum: 1 }

Code language: PHP (php)
74

Bây giờ, chúng tôi áp dụng giai đoạn

{ $sum: 1 }

Code language: PHP (php)
15, trên mảng của sinh viên và kiểm tra xem chúng tôi có nhận được tài liệu cho mỗi phần tử của mảng không

Tài liệu đầu tiên được tạo thành từ các trường trong phần tử đầu tiên của mảng và phần còn lại của các trường chung

Tài liệu thứ hai được tạo thành từ các trường trong phần tử thứ hai của mảng và phần còn lại của các trường chung, v.v.

{ $sum: 1 }

Code language: PHP (php)
75

MongoDB $ sắp xếp

Bạn cần giai đoạn

{ $sum: 1 }

Code language: PHP (php)
21 để sắp xếp kết quả của mình theo giá trị của một trường cụ thể

Ví dụ: hãy sắp xếp các tài liệu thu được từ giai đoạn

{ $sum: 1 }

Code language: PHP (php)
15 theo số lượng sinh viên theo thứ tự giảm dần

Để có được kết quả thấp hơn, tôi sẽ chỉ dự đoán năm và số lượng sinh viên

{ $sum: 1 }

Code language: PHP (php)
76

Điều này mang lại kết quả…

{ $sum: 1 }

Code language: PHP (php)
77

Giai đoạn 

{ $sum: 1 }

Code language: PHP (php)
21 có thể được sử dụng với các giai đoạn khác để giảm dữ liệu trong bộ sưu tập MongoDB xuống chính xác những gì bạn cần

Giới hạn $ MongoDB

Nếu bạn chỉ quan tâm đến hai kết quả đầu tiên của truy vấn thì sao?

{ $sum: 1 }

Code language: PHP (php)
78

Lưu ý rằng khi bạn cần giới hạn số lượng tài liệu được sắp xếp, bạn phải sử dụng giai đoạn

{ $sum: 1 }

Code language: PHP (php)
24 ngay sau giai đoạn

{ $sum: 1 }

Code language: PHP (php)
21

Bây giờ chúng tôi có một đường ống đầy đủ

Chúng ta có thể dán toàn bộ truy vấn tổng hợp MongoDB này và tất cả các giai đoạn của nó vào thẳng Trình chỉnh sửa tổng hợp trong Studio 3T

Nó được dán vào bằng cách sao chép nó và nhấp vào nút dán mã như được hiển thị

Đếm MongoDB tổng hợp

Đọc thêm về Trình chỉnh sửa tổng hợp, trình tạo truy vấn tổng hợp MongoDB theo từng giai đoạn của Studio 3T

Chỉ phần hiển thị bên dưới được sao chép và dán vào

{ $sum: 1 }

Code language: PHP (php)
79

Trong ảnh chụp màn hình tiếp theo, chúng ta có thể thấy toàn bộ quy trình trong Studio 3T và đầu ra của nó

Đếm MongoDB tổng hợp

Xóa các giai đoạn trong Studio 3T là một vấn đề đơn giản bằng cách sử dụng nút được hiển thị trong ảnh chụp màn hình tiếp theo

Đếm MongoDB tổng hợp

Trình chỉnh sửa tập hợp của Studio 3T hỗ trợ các giai đoạn và toán tử tập hợp MongoDB này

$addFields

Có thể bạn cần thực hiện một số thay đổi đối với đầu ra của mình theo cách của các trường mới. Trong ví dụ tiếp theo, chúng tôi muốn thêm năm thành lập trường đại học

{ $sum: 1 }

Code language: PHP (php)
00

Điều này mang lại kết quả…

{ $sum: 1 }

Code language: PHP (php)
01

MongoDB $count

Giai đoạn

{ $sum: 1 }

Code language: PHP (php)
26 cung cấp một cách dễ dàng để kiểm tra số lượng tài liệu thu được trong đầu ra của các giai đoạn trước của quy trình

Hãy xem nó hoạt động

{ $sum: 1 }

Code language: PHP (php)
02

Điều này cung cấp tổng số những năm mà chúng tôi biết số lượng sinh viên tại trường Đại học

{ $sum: 1 }

Code language: PHP (php)
03

Tra cứu $ MongoDB

Vì MongoDB dựa trên tài liệu nên chúng tôi có thể định hình tài liệu của mình theo cách chúng tôi cần. Tuy nhiên, thường có yêu cầu sử dụng thông tin từ nhiều bộ sưu tập

Sử dụng

{ $sum: 1 }

Code language: PHP (php)
27, đây là một truy vấn tổng hợp hợp nhất các trường từ hai bộ sưu tập

{ $sum: 1 }

Code language: PHP (php)
04

Cần một ví dụ khác về

{ $sum: 1 }

Code language: PHP (php)
27?

Nếu bạn muốn truy vấn này chạy nhanh, bạn sẽ cần lập chỉ mục trường

{ $sum: 1 }

Code language: PHP (php)
46 trong bộ sưu tập

{ $sum: 1 }

Code language: PHP (php)
10 và trường

{ $sum: 1 }

Code language: PHP (php)
91 trong bộ sưu tập

{ $sum: 1 }

Code language: PHP (php)
92

Nói cách khác, đừng quên lập chỉ mục các trường liên quan đến

{ $sum: 1 }

Code language: PHP (php)
27

{ $sum: 1 }

Code language: PHP (php)
05

Đây là cách nhanh nhất để tạo một chỉ mục trong MongoDB

MongoDB $sortByCount

Giai đoạn này là một lối tắt để nhóm, đếm và sau đó sắp xếp theo thứ tự giảm dần số lượng các giá trị khác nhau trong một trường

Giả sử bạn muốn biết số lượng khóa học trên mỗi cấp độ, được sắp xếp theo thứ tự giảm dần. Sau đây là truy vấn bạn sẽ cần xây dựng

{ $sum: 1 }

Code language: PHP (php)
06

Đây là đầu ra

{ $sum: 1 }

Code language: PHP (php)
07

MongoDB $facet

Đôi khi, khi tạo một báo cáo về dữ liệu, bạn nhận thấy rằng mình cần thực hiện cùng một quá trình xử lý sơ bộ cho một số báo cáo và bạn phải đối mặt với việc phải tạo và duy trì một bộ sưu tập trung gian

Ví dụ: bạn có thể thực hiện tóm tắt giao dịch hàng tuần được sử dụng cho tất cả các báo cáo tiếp theo. Bạn có thể ước rằng có thể chạy nhiều hơn một đường ống đồng thời trên đầu ra của một đường ống tổng hợp duy nhất

Bây giờ chúng tôi có thể làm điều đó trong một quy trình duy nhất nhờ giai đoạn

{ $sum: 1 }

Code language: PHP (php)
94

Hãy xem ví dụ này

{ $sum: 1 }

Code language: PHP (php)
08

Những gì chúng tôi đã làm là tạo hai báo cáo từ cơ sở dữ liệu của chúng tôi về các khóa học đại học. ĐếmLevels và YearWithLessStudents

Cả hai đều sử dụng đầu ra từ hai giai đoạn đầu tiên,

use 3tdb
db.universities.insert([
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'USAL',
  location : {
    type : 'Point',
    coordinates : [ -5.6722512,17, 40.9607792 ]
  },
  students : [
    { year : 2014, number : 24774 },
    { year : 2015, number : 23166 },
    { year : 2016, number : 21913 },
    { year : 2017, number : 21715 }
  ]
},
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'UPSA',
  location : {
    type : 'Point',
    coordinates : [ -5.6691191,17, 40.9631732 ]
  },
  students : [
    { year : 2014, number : 4788 },
    { year : 2015, number : 4821 },
    { year : 2016, number : 6550 },
    { year : 2017, number : 6125 }
  ]
}
])
9 và

{ $sum: 1 }

Code language: PHP (php)
27

Với một bộ sưu tập lớn, điều này có thể tiết kiệm rất nhiều thời gian xử lý bằng cách tránh lặp lại và chúng ta không cần phải viết một bộ sưu tập tạm thời trung gian nữa

{ $sum: 1 }

Code language: PHP (php)
09

Đọc thêm về các trường hợp sử dụng khác của giai đoạn $facet trong tổng hợp MongoDB

Tập thể dục

Bây giờ, hãy cố gắng tự mình giải quyết bài tập tiếp theo

Làm thế nào để chúng ta có được tổng số sinh viên đã từng thuộc về từng trường đại học?

use 3tdb
db.universities.insert([
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'USAL',
  location : {
    type : 'Point',
    coordinates : [ -5.6722512,17, 40.9607792 ]
  },
  students : [
    { year : 2014, number : 24774 },
    { year : 2015, number : 23166 },
    { year : 2016, number : 21913 },
    { year : 2017, number : 21715 }
  ]
},
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'UPSA',
  location : {
    type : 'Point',
    coordinates : [ -5.6691191,17, 40.9631732 ]
  },
  students : [
    { year : 2014, number : 4788 },
    { year : 2015, number : 4821 },
    { year : 2016, number : 6550 },
    { year : 2017, number : 6125 }
  ]
}
])
0

Đầu ra

use 3tdb
db.universities.insert([
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'USAL',
  location : {
    type : 'Point',
    coordinates : [ -5.6722512,17, 40.9607792 ]
  },
  students : [
    { year : 2014, number : 24774 },
    { year : 2015, number : 23166 },
    { year : 2016, number : 21913 },
    { year : 2017, number : 21715 }
  ]
},
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'UPSA',
  location : {
    type : 'Point',
    coordinates : [ -5.6691191,17, 40.9631732 ]
  },
  students : [
    { year : 2014, number : 4788 },
    { year : 2015, number : 4821 },
    { year : 2016, number : 6550 },
    { year : 2017, number : 6125 }
  ]
}
])
1

Có, tôi đã kết hợp hai giai đoạn. Tuy nhiên, làm cách nào để tạo một truy vấn sắp xếp đầu ra theo trường

{ $sum: 1 }

Code language: PHP (php)
97 theo thứ tự giảm dần?

use 3tdb
db.universities.insert([
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'USAL',
  location : {
    type : 'Point',
    coordinates : [ -5.6722512,17, 40.9607792 ]
  },
  students : [
    { year : 2014, number : 24774 },
    { year : 2015, number : 23166 },
    { year : 2016, number : 21913 },
    { year : 2017, number : 21715 }
  ]
},
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'UPSA',
  location : {
    type : 'Point',
    coordinates : [ -5.6691191,17, 40.9631732 ]
  },
  students : [
    { year : 2014, number : 4788 },
    { year : 2015, number : 4821 },
    { year : 2016, number : 6550 },
    { year : 2017, number : 6125 }
  ]
}
])
2

Phải, chúng ta cần áp dụng giai đoạn

{ $sum: 1 }

Code language: PHP (php)
98 ở đầu ra của

{ $sum: 1 }

Code language: PHP (php)
99

Kiểm tra truy vấn tổng hợp của chúng tôi

Tôi đã đề cập trước đó rằng rất dễ dàng và thực sự cần thiết để kiểm tra xem các giai đoạn truy vấn của chúng ta có đang thực hiện theo cách chúng ta cần chúng thực hiện hay không

Với Studio 3T, bạn có hai bảng chuyên dụng để kiểm tra tài liệu đầu vào và đầu ra cho bất kỳ giai đoạn cụ thể nào

Hiệu suất

Đường dẫn tổng hợp tự động định hình lại truy vấn với mục đích cải thiện hiệu suất của nó

Nếu bạn có cả hai giai đoạn

{ $sum: 1 }

Code language: PHP (php)
21 và
use 3tdb
db.universities.insert([
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'USAL',
  location : {
    type : 'Point',
    coordinates : [ -5.6722512,17, 40.9607792 ]
  },
  students : [
    { year : 2014, number : 24774 },
    { year : 2015, number : 23166 },
    { year : 2016, number : 21913 },
    { year : 2017, number : 21715 }
  ]
},
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'UPSA',
  location : {
    type : 'Point',
    coordinates : [ -5.6691191,17, 40.9631732 ]
  },
  students : [
    { year : 2014, number : 4788 },
    { year : 2015, number : 4821 },
    { year : 2016, number : 6550 },
    { year : 2017, number : 6125 }
  ]
}
])
9, tốt hơn hết là sử dụng
use 3tdb
db.universities.insert([
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'USAL',
  location : {
    type : 'Point',
    coordinates : [ -5.6722512,17, 40.9607792 ]
  },
  students : [
    { year : 2014, number : 24774 },
    { year : 2015, number : 23166 },
    { year : 2016, number : 21913 },
    { year : 2017, number : 21715 }
  ]
},
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'UPSA',
  location : {
    type : 'Point',
    coordinates : [ -5.6691191,17, 40.9631732 ]
  },
  students : [
    { year : 2014, number : 4788 },
    { year : 2015, number : 4821 },
    { year : 2016, number : 6550 },
    { year : 2017, number : 6125 }
  ]
}
])
9 trước

{ $sum: 1 }

Code language: PHP (php)
21 để giảm thiểu số lượng tài liệu mà giai đoạn

{ $sum: 1 }

Code language: PHP (php)
21 phải xử lý

Để tận dụng các chỉ mục, bạn phải thực hiện điều đó trong giai đoạn đầu tiên của quy trình bán hàng. Và ở đây, bạn phải sử dụng giai đoạn

use 3tdb
db.universities.insert([
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'USAL',
  location : {
    type : 'Point',
    coordinates : [ -5.6722512,17, 40.9607792 ]
  },
  students : [
    { year : 2014, number : 24774 },
    { year : 2015, number : 23166 },
    { year : 2016, number : 21913 },
    { year : 2017, number : 21715 }
  ]
},
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'UPSA',
  location : {
    type : 'Point',
    coordinates : [ -5.6691191,17, 40.9631732 ]
  },
  students : [
    { year : 2014, number : 4788 },
    { year : 2015, number : 4821 },
    { year : 2016, number : 6550 },
    { year : 2017, number : 6125 }
  ]
}
])
9 hoặc

{ $sum: 1 }

Code language: PHP (php)
21

Chúng ta có thể kiểm tra xem truy vấn có đang sử dụng chỉ mục hay không thông qua phương thức

{ $sum: 1 }

Code language: PHP (php)
07

use 3tdb
db.universities.insert([
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'USAL',
  location : {
    type : 'Point',
    coordinates : [ -5.6722512,17, 40.9607792 ]
  },
  students : [
    { year : 2014, number : 24774 },
    { year : 2015, number : 23166 },
    { year : 2016, number : 21913 },
    { year : 2017, number : 21715 }
  ]
},
{
  country : 'Spain',
  city : 'Salamanca',
  name : 'UPSA',
  location : {
    type : 'Point',
    coordinates : [ -5.6691191,17, 40.9631732 ]
  },
  students : [
    { year : 2014, number : 4788 },
    { year : 2015, number : 4821 },
    { year : 2016, number : 6550 },
    { year : 2017, number : 6125 }
  ]
}
])
3

Bạn luôn có thể xem kế hoạch

{ $sum: 1 }

Code language: PHP (php)
07 của bất kỳ truy vấn tổng hợp nào dưới dạng sơ đồ hoặc ở dạng JSON bằng cách nhấp vào tab Giải thích

Đếm MongoDB tổng hợp

Phần kết luận

Tôi đã giới thiệu quy trình tổng hợp MongoDB và minh họa bằng các ví dụ về cách chỉ sử dụng một số giai đoạn

Bạn càng sử dụng MongoDB nhiều thì quy trình tổng hợp càng trở nên quan trọng hơn trong việc cho phép bạn thực hiện tất cả các tác vụ báo cáo, chuyển đổi và truy vấn nâng cao vốn không thể thiếu đối với công việc của nhà phát triển cơ sở dữ liệu

Với các quy trình đường ống phức tạp hơn, việc kiểm tra và gỡ lỗi đầu vào và đầu ra của mọi giai đoạn ngày càng trở nên quan trọng.

Luôn có một điểm mà tại đó người ta cần dán đường dẫn tổng hợp đang phát triển vào IDE cho MongoDB, chẳng hạn như Studio 3T, với Trình chỉnh sửa tổng hợp tích hợp sẵn, để bạn có thể gỡ lỗi mọi giai đoạn một cách độc lập

Làm cách nào để đếm dữ liệu trong MongoDB tổng hợp?

MongoDB tổng hợp phần tử $count trong mảng. MongoDB tổng số $count lớn hơn. .
Sau đó, kết nối với máy chủ
Truy cập bộ sưu tập Bán hàng MongoDB của cơ sở dữ liệu mydatabase
Sau đó, chúng tôi đã áp dụng thao tác tổng hợp $count để đếm số lượng tài liệu

Chúng ta có thể sử dụng tính năng đếm với hàm tổng hợp trong MongoDB không?

MongoDB $count Aggregation . Có một số điều quan trọng cần lưu ý về cú pháp này. Đầu tiên, chúng tôi gọi toán tử $count và sau đó chỉ định chuỗi. The MongoDB $count operator allows us to pass a document to the next phase of the aggregation pipeline that contains a count of the documents. There a couple of important things to note about this syntax: First, we invoke the $count operator and then specify the string.

Làm cách nào để sử dụng số lượng trong nhóm trong MongoDB?

Chúng ta có thể sử dụng đoạn mã sau để nhóm theo trường 'vị trí' và đếm số lần xuất hiện của từng vị trí. .
Vị trí 'Chuyển tiếp' xảy ra 1 lần
Vị trí 'Guard' xảy ra 3 lần
Vị trí 'Trung tâm' xuất hiện 1 lần

Làm cách nào để đếm số lượng dựa trên điều kiện trong MongoDB?

Phương thức đếm MongoDB () – db. Bộ sưu tập. count() Phương thức count() đếm số lượng tài liệu phù hợp với tiêu chí lựa chọn.