MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

nhóm theo tháng và năm bằng cách sử dụng mongoose.js

Mongoose cung cấp một trình bao bọc nhẹ xung quanh khung tổng hợp MongoDB. Nếu bạn mới sử dụng tính năng tổng hợp, bạn có thể tìm hiểu thêm từ tài liệu MongoDB: http:/ /docs.mongodb.org/manual/aggregation/

Để biến dữ liệu của bạn thành dạng bạn đã mô tả ở trên, bạn có thể sử dụng một đường dẫn tổng hợp với một loạt các thao tác $ group. Ở đây nó đang sử dụng khung mongoose:

var dateSchema = mongoose.Schema({…});
var DateItem = mongoose.model('DateItem', dateSchema);

DateItem.aggregate(
      { $group : { 
           _id : { year: { $year : "$accessDate" }, month: { $month : "$accessDate" },day: { $dayOfMonth : "$accessDate" }}, 
           count : { $sum : 1 }}
           }, 
      { $group : { 
           _id : { year: "$_id.year", month: "$_id.month" }, 
           dailyusage: { $push: { day: "$_id.day", count: "$count" }}}
           }, 
      { $group : { 
           _id : { year: "$_id.year" }, 
           monthlyusage: { $push: { month: "$_id.month", dailyusage: "$dailyusage" }}}
           }, 
      function (err, res)
           { if (err) ; // TODO handle error 
             console.log(res); 
           });
});

Nhóm $ đầu tiên sẽ dẫn đến các tài liệu có dạng này, một tài liệu cho mỗi ngày:

{ 
  "_id" : { "year" : 2013, "month" : 8, "day" : 15 },
  "count" : 1
}

Nhóm $ thứ hai sẽ dẫn đến các tài liệu được nhóm theo tháng:

{
  "_id" : { "year" : 2012, "month" : 11 },
 "dailyusage" : [
          { "day" : 6, "count" : 1 },
          { "day" : 9, "count" : 1 },
          ... ]
},

Và nhóm $ thứ ba sẽ tạo ra các tài liệu lớn hơn nữa, mỗi năm một tài liệu.

Truy vấn này sẽ tổng hợp dữ liệu của bạn thành các tài liệu lớn, có thứ bậc. Tuy nhiên, nếu bạn định chạy các truy vấn trên dữ liệu này sau khi tổng hợp, đây có thể không phải là biểu mẫu hữu ích nhất cho dữ liệu của bạn. Hãy xem xét cách bạn sẽ sử dụng dữ liệu tổng hợp. Một lược đồ liên quan đến nhiều tài liệu nhỏ hơn, có thể một tài liệu mỗi tháng hoặc thậm chí một tài liệu mỗi ngày, có thể thuận tiện hơn.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tìm sự khác biệt với các bộ sưu tập trong mongodb

  2. Node.js + mongoose tìm thấy nút bị đóng băng khi có hơn 100 kết quả

  3. Lỗi giao dịch PyMongo:Số giao dịch chỉ được phép trên một thành viên hoặc mongos đặt bản sao

  4. 6 cách để có được cả năm từ một ngày trong MongoDB

  5. Sự cố khi cài đặt Mongodb trên Ubuntu 20.04