Nhóm đếm MongoDB theo ngày

Bạn có thể sử dụng khung tổng hợp để nhóm theo ngày trong MongoDB. Trước tiên chúng ta hãy tạo một bộ sưu tập với một số tài liệu. Truy vấn để tạo một bộ sưu tập với các tài liệu như sau

> db.groupByDateDemo.insertOne({"UserLoginDateTime":new ISODate()});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c6ee4df6fd07954a4890695")
}
> db.groupByDateDemo.insertOne({"UserLoginDateTime":new ISODate("2019-01-31
15:20:09.234Z")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c6ee51c6fd07954a4890696")
}
> db.groupByDateDemo.insertOne({"UserLoginDateTime":new ISODate("2017-04-21
16:12:13.240Z")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c6ee5336fd07954a4890697")
}
> db.groupByDateDemo.insertOne({"UserLoginDateTime":new ISODate("2016-05-25
19:11:21.130Z")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c6ee54b6fd07954a4890698")
}
> db.groupByDateDemo.insertOne({"UserLoginDateTime":new ISODate("2016-05-25
19:11:21.130Z")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c6ee8de6fd07954a4890699")
}
> db.groupByDateDemo.insertOne({"UserLoginDateTime":new ISODate()});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c6ee8e76fd07954a489069a")
}

Hiển thị tất cả các tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find(). Truy vấn như sau

> db.groupByDateDemo.find().pretty();

Sau đây là đầu ra

{
   "_id" : ObjectId("5c6ee4df6fd07954a4890695"),
   "UserLoginDateTime" : ISODate("2019-02-21T17:50:23.076Z")
}
{
   "_id" : ObjectId("5c6ee51c6fd07954a4890696"),
   "UserLoginDateTime" : ISODate("2019-01-31T15:20:09.234Z")
}
{
   "_id" : ObjectId("5c6ee5336fd07954a4890697"),
   "UserLoginDateTime" : ISODate("2017-04-21T16:12:13.240Z")
}
{
   "_id" : ObjectId("5c6ee54b6fd07954a4890698"),
   "UserLoginDateTime" : ISODate("2016-05-25T19:11:21.130Z")
}
{
   "_id" : ObjectId("5c6ee8de6fd07954a4890699"),
   "UserLoginDateTime" : ISODate("2016-05-25T19:11:21.130Z")
}
{
   "_id" : ObjectId("5c6ee8e76fd07954a489069a"),
   "UserLoginDateTime" : ISODate("2019-02-21T18:07:35.208Z")
}

Đây là truy vấn để nhóm theo ngày trong MongoDB

> db.groupByDateDemo.aggregate([
.. { $group: {
.. _id: {
.. $add: [
.. { $dayOfYear: "$UserLoginDateTime"},
.. { $multiply:
.. [400, {$year: "$UserLoginDateTime"}]
.. }
.. ]},
.. NumberOfTimes: { $sum: 1 },
.. f: {$min: "$UserLoginDateTime"}
.. }
.. },
.. { $sort: {_id: 1} },
.. { $limit: 10 },
.. { $project: { date: "$f", NumberOfTimes: 1, _id: 0} }
.. ]);

Sau đây là đầu ra

{ "NumberOfTimes" : 2, "date" : ISODate("2016-05-25T19:11:21.130Z") }
{ "NumberOfTimes" : 1, "date" : ISODate("2017-04-21T16:12:13.240Z") }
{ "NumberOfTimes" : 1, "date" : ISODate("2019-01-31T15:20:09.234Z") }
{ "NumberOfTimes" : 2, "date" : ISODate("2019-02-21T17:50:23.076Z") }

Nhóm đếm MongoDB theo ngày


Nhóm đếm MongoDB theo ngày

MongoDB là Cơ sở dữ liệu NoSQL mã nguồn mở nổi tiếng được viết bằng C++. MongoDB là Cơ sở dữ liệu hướng tài liệu sử dụng các tài liệu giống JSON với Lược đồ động để lưu trữ dữ liệu. Điều đó có nghĩa là bạn có thể lưu trữ các bản ghi của mình mà không phải lo lắng về Cấu trúc dữ liệu, số lượng trường hoặc loại trường được sử dụng để lưu trữ giá trị. Các tài liệu trong MongoDB tương tự như các đối tượng JSON

Bạn có thể thay đổi cấu trúc của các bản ghi (mà MongoDB gọi là Tài liệu) bằng cách thêm các trường mới hoặc xóa các trường hiện có. Tính năng này của MongoDB cho phép bạn dễ dàng biểu diễn các Mối quan hệ phân cấp, Mảng lưu trữ và các cấu trúc dữ liệu phức tạp khác

Ngày nay, nhiều gã khổng lồ công nghệ, bao gồm Facebook, eBay, Adobe và Google, sử dụng MongoDB để lưu trữ lượng lớn dữ liệu của họ.

Các tính năng chính của MongoDB

Nhóm đếm MongoDB theo ngày
Nguồn hình ảnh

MongoDB cung cấp một loạt các tính năng độc đáo giúp nó trở thành một giải pháp tốt hơn so với các cơ sở dữ liệu thông thường khác. Một số tính năng này được thảo luận dưới đây

  • Sơ đồ ít cơ sở dữ liệu hơn. Cơ sở dữ liệu ít lược đồ cho phép nhiều loại Tài liệu khác nhau được lưu trữ trong một Bộ sưu tập duy nhất (tương đương với một bảng). Nói cách khác, trong cơ sở dữ liệu MongoDB, một bộ sưu tập có thể chứa nhiều Tài liệu, mỗi tài liệu có thể có số lượng Trường, Nội dung và Kích thước khác nhau.

    Không nhất thiết tài liệu này phải giống với tài liệu khác, đây là điều kiện tiên quyết trong Cơ sở dữ liệu quan hệ. Do tính năng này, MongoDB mang đến sự linh hoạt tuyệt vời cho người dùng.
  • Tài liệu dựa trên chỉ mục. Mọi trường trong Tài liệu trong cơ sở dữ liệu MongoDB đều được lập chỉ mục với Chỉ số chính và phụ, giúp truy xuất thông tin từ nhóm dữ liệu dễ dàng hơn.  
  • Khả năng mở rộng. Sharding trong MongoDB cho phép khả năng mở rộng theo chiều ngang. Sharding đề cập đến quá trình phân phối dữ liệu trên nhiều Máy chủ.

    Một lượng lớn dữ liệu được phân chia thành các khối dữ liệu bằng Khóa phân đoạn và các khối dữ liệu này được phân bổ đồng đều trên các Phân đoạn nằm trên nhiều Máy chủ vật lý.
  • Nhân rộng. MongoDB cung cấp tính sẵn sàng cao của dữ liệu bằng cách tạo nhiều bản sao dữ liệu và gửi các bản sao này đến một máy chủ khác để nếu một máy chủ bị lỗi, dữ liệu vẫn có thể được lấy từ Máy chủ khác. Bạn có thể tìm hiểu thêm về MongoDB Replication tại đây

 Đơn giản hóa MongoDB ETL bằng cách sử dụng đường dẫn dữ liệu không mã của Hevo

Dữ liệu Hevo là Đường ống dữ liệu không có mã cung cấp giải pháp được quản lý hoàn toàn để thiết lập Tích hợp dữ liệu cho hơn 100 nguồn dữ liệu (bao gồm hơn 40 nguồn miễn phí) và sẽ cho phép bạn tải trực tiếp dữ liệu từ các nguồn như MongoDB đến Kho dữ liệu hoặc Đích . Nó sẽ tự động hóa luồng dữ liệu của bạn trong vài phút mà không cần viết bất kỳ dòng mã nào. Kiến trúc chịu lỗi của nó đảm bảo rằng dữ liệu của bạn được an toàn và nhất quán. Hevo cung cấp cho bạn một giải pháp thực sự hiệu quả và hoàn toàn tự động để quản lý dữ liệu theo thời gian thực và luôn có sẵn dữ liệu để phân tích.  

Bắt đầu với Hevo miễn phí

Cùng điểm qua một số tính năng nổi bật của Hevo

  • Được quản lý hoàn toàn. Nó không yêu cầu quản lý và bảo trì vì Hevo là một nền tảng hoàn toàn tự động
  • Chuyển đổi dữ liệu. Nó cung cấp một giao diện đơn giản để hoàn thiện, sửa đổi và làm giàu dữ liệu bạn muốn chuyển.  
  • Thời gian thực. Hevo cung cấp di chuyển dữ liệu theo thời gian thực. Vì vậy, dữ liệu của bạn luôn sẵn sàng để phân tích
  • Quản lý lược đồ. Hevo có thể tự động phát hiện lược đồ của dữ liệu đến và ánh xạ nó tới lược đồ đích
  • kết nối. Hevo hỗ trợ hơn 100 Tích hợp cho nền tảng SaaS FTP/SFTP, Tệp, Cơ sở dữ liệu, công cụ BI và API REST gốc & Trình kết nối Webhooks. Nó hỗ trợ nhiều điểm đến khác nhau bao gồm Google BigQuery, Amazon Redshift, Snowflake, Firebolt, Data Warehouses; .   
  • Chắc chắn. Hevo có kiến ​​trúc chịu lỗi đảm bảo rằng dữ liệu được xử lý một cách an toàn, nhất quán và không bị mất dữ liệu
  • Hevo được xây dựng để mở rộng quy mô. Khi số lượng nguồn và khối lượng dữ liệu của bạn tăng lên, Hevo sẽ mở rộng quy mô theo chiều ngang, xử lý hàng triệu bản ghi mỗi phút với rất ít độ trễ
  • Giám sát trực tiếp. Giám sát nâng cao cung cấp cho bạn chế độ xem một cửa để theo dõi tất cả các hoạt động diễn ra trong Đường ống dữ liệu
  • Hỗ trợ trực tuyến. Nhóm Hevo luôn sẵn sàng mở rộng hỗ trợ đặc biệt cho khách hàng của mình thông qua trò chuyện, email và các cuộc gọi hỗ trợ
Đăng ký tại đây để dùng thử miễn phí 14 ngày

Làm cách nào để sử dụng Phương thức tổng hợp nhóm MongoDB?

Nhóm đếm MongoDB theo ngày
Nguồn hình ảnh

A) Cú pháp chung của MongoDB Groupby Aggregation Method

{ $group (Aggregation is used to define group by): { _id: , : {  :  },  : ,  :  } }... :  } } }

B) Các tham số liên quan đến MongoDB Groupby Aggregation

Các tham số liên quan đến mô tả cú pháp của MongoDB Groupby Aggregation Method như sau

  • nhóm $. $group xuất ra một tài liệu cho từng nhóm tài liệu đầu vào riêng biệt dựa trên biểu thức _id đã chỉ định. Tập hợp này tạo ra trường _id, chứa nhóm theo khóa của các bản ghi riêng biệt. Các tài liệu đầu ra cũng có thể bao gồm các trường được tính toán có chứa các giá trị của biểu thức bộ tích lũy
  • _Tôi. Đây là trường bắt buộc của MongoDB Groupby khi sử dụng tổng hợp với toán tử $group. Để tính toán giá trị tích lũy từ tất cả các giá trị đầu vào, bạn có thể chỉ định giá trị id với giá trị null
  • ắc quy. Bộ tích lũy là các toán tử trong MongoDB Groupby duy trì trạng thái của chúng (e. g. , tổng, tối đa, tối thiểu và dữ liệu liên quan) trong khi tài liệu di chuyển qua đường ống. Một số toán tử Accumulator được liệt kê bên dưới
    • $addToSet. Đối với mỗi nhóm, toán tử này trả về một mảng các giá trị biểu thức duy nhất
    • $trung bình. Sử dụng toán tử $group, toán tử $avg trả về giá trị trung bình của tất cả các trường số. Toán tử này bỏ qua các giá trị không phải là số trong tập hợp
    • $đầu tiên. Toán tử này trả về một giá trị từ tài liệu đầu tiên của mỗi nhóm
    • $ cuối cùng. Toán tử này trả về một giá trị từ tài liệu cuối cùng của mỗi nhóm
    • tối đa $. Toán tử này trả về giá trị lớn nhất từ ​​mỗi nhóm
    • $min. Toán tử này trả về giá trị tối thiểu từ mỗi nhóm
    • $mergeObjects. Toán tử này trả về một tài liệu được tạo bằng cách kết hợp các tài liệu đầu vào cho từng nhóm
    • đẩy $. Toán tử này trả về một mảng các giá trị biểu thức cho từng nhóm tài liệu
    • tổng $. Toán tử này trả về tổng của tất cả các trường số

C) Ví dụ khái niệm. Sử dụng MongoDB Groupby Aggregation

Để hiểu hoạt động của phương thức MongoDB Groupby Aggregation, hãy tạo một mẫu có tên sales với dữ liệu sau


db.sales.insertMany([
  { "_id" : 1, "item" : "abc", "price" : NumberDecimal("10"), "quantity" : NumberInt("2"), "date" : ISODate("2014-03-01T08:00:00Z") },
  { "_id" : 2, "item" : "jkl", "price" : NumberDecimal("20"), "quantity" : NumberInt("1"), "date" : ISODate("2014-03-01T09:00:00Z") },
  { "_id" : 3, "item" : "xyz", "price" : NumberDecimal("5"), "quantity" : NumberInt( "10"), "date" : ISODate("2014-03-15T09:00:00Z") },
  { "_id" : 4, "item" : "xyz", "price" : NumberDecimal("5"), "quantity" :  NumberInt("20") , "date" : ISODate("2014-04-04T11:21:39.736Z") },
  { "_id" : 5, "item" : "abc", "price" : NumberDecimal("10"), "quantity" : NumberInt("10") , "date" : ISODate("2014-04-04T21:23:13.331Z") },
  { "_id" : 6, "item" : "def", "price" : NumberDecimal("7.5"), "quantity": NumberInt("5" ) , "date" : ISODate("2015-06-04T05:08:13Z") },
  { "_id" : 7, "item" : "def", "price" : NumberDecimal("7.5"), "quantity": NumberInt("10") , "date" : ISODate("2015-09-10T08:43:00Z") },
  { "_id" : 8, "item" : "abc", "price" : NumberDecimal("10"), "quantity" : NumberInt("5" ) , "date" : ISODate("2016-02-06T20:20:13Z") },
])

Bây giờ, giả sử bạn muốn áp dụng chức năng MongoDB Groupby để tính Tổng số tiền bán hàng, Số lượng bán hàng trung bình và Số lượng bán hàng cho mỗi ngày trong năm 2014. Đoạn mã sau sẽ giúp bạn trích xuất thông tin cần thiết

db.sales.aggregate([
  // First Stage
  {
    $match : { "date": { $gte: new ISODate("2014-01-01"), $lt: new ISODate("2015-01-01") } }
  },
  // Second Stage
  {
    $group : {
       _id : { $dateToString: { format: "%Y-%m-%d", date: "$date" } },
       totalSaleAmount: { $sum: { $multiply: [ "$price", "$quantity" ] } },
       averageQuantity: { $avg: "$quantity" },
       count: { $sum: 1 }
    }
  },
  // Third Stage
  {
    $sort : { totalSaleAmount: -1 }
  }
 ])

Ở đâu

  • Bộ lọc $match lọc các tài liệu để chỉ những tài liệu từ năm 2014 được chuyển sang giai đoạn tiếp theo
  • Giai đoạn nhóm $ tổ chức các tài liệu theo Ngày và tính toán Tổng số tiền bán, Số lượng trung bình và Tổng số cho mỗi nhóm
  • Giai đoạn $sort sắp xếp kết quả theo thứ tự giảm dần dựa trên Tổng số tiền bán cho mỗi nhóm

đầu ra

________số 8

Phần kết luận

Bài viết này đã giới thiệu cho các bạn về MongoDB cùng với các tính năng nổi bật mà nó mang lại. Hơn nữa, nó đã giới thiệu cho bạn phương thức MongoDB Groupby Aggregation cùng với các truy vấn mẫu và cú pháp của nó. Khi doanh nghiệp của bạn bắt đầu phát triển, dữ liệu được tạo theo cấp số nhân trên tất cả các ứng dụng SaaS, Cơ sở dữ liệu và các nguồn khác của công ty bạn

Để đáp ứng nhu cầu lưu trữ và xử lý dữ liệu ngày càng tăng này,  bạn cần đầu tư một phần băng thông kỹ thuật của mình để Tích hợp dữ liệu từ tất cả các nguồn, Làm sạch & Chuyển đổi dữ liệu và cuối cùng tải dữ liệu đó vào Kho dữ liệu trên đám mây để có thêm Phân tích kinh doanh. Tất cả những thách thức này có thể được xử lý hiệu quả bằng công cụ ETL dựa trên đám mây như Hevo Data

Ghé thăm trang web của chúng tôi để khám phá Hevo

Hevo Data, Đường ống dữ liệu không mã cung cấp cho bạn giải pháp nhất quán và đáng tin cậy để quản lý truyền dữ liệu giữa nhiều nguồn khác nhau như MongoDB và nhiều Điểm đến mong muốn khác nhau, với một vài cú nhấp chuột. Hevo Data với khả năng tích hợp mạnh mẽ với hơn 100 nguồn (bao gồm hơn 40 nguồn miễn phí) cho phép bạn không chỉ xuất dữ liệu từ các nguồn dữ liệu mong muốn và tải dữ liệu đó đến đích bạn chọn mà còn chuyển đổi và làm phong phú dữ liệu của bạn để phân tích.

Bạn muốn thử Hevo? . Bạn cũng có thể xem giá cạnh tranh nhất sẽ giúp bạn chọn gói phù hợp cho nhu cầu kinh doanh của mình

Chia sẻ với chúng tôi kinh nghiệm của bạn khi tìm hiểu về MongoDB Group By Aggregation Method trong phần bình luận bên dưới

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 các bản ghi trong MongoDB?

count() được sử dụng để trả về số lượng tài liệu khớp với truy vấn find() . db. thu thập. Phương thức đếm () không thực hiện thao tác tìm () mà thay vào đó đếm và trả về số lượng kết quả khớp với truy vấn.

$root trong MongoDB là gì?

Tài nguyên gốc là điểm bắt đầu cho API Trình quản lý đám mây . Từ đây, bạn có thể duyệt qua các liên kết để truy cập tất cả các tài nguyên API khác.

Chúng ta có thể sử dụng nhóm theo trong MongoDB không?

MongoDB group by được sử dụng để nhóm dữ liệu từ bộ sưu tập, chúng ta có thể đạt được nhóm theo mệnh đề bằng hàm tổng hợp và phương thức nhóm trong MongoDB . Mặc dù sử dụng hàm tổng hợp với các hoạt động truy vấn nhóm theo mệnh đề nhanh hơn như truy vấn thông thường, nhưng về cơ bản, hàm tổng hợp được sử dụng trong nhiều điều kiện.