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

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

MongoDB cung cấp khá nhiều toán tử đường ống tổng hợp để làm việc với ngày tháng. Điều này bao gồm các toán tử trích xuất các phần nhất định của ngày, chẳng hạn như năm, tháng, ngày, v.v.

Ngoài ra còn có một số phương thức MongoDB cho phép bạn lặp qua con trỏ và áp dụng một hàm JavaScript. Do đó, điều này cho phép bạn sử dụng JavaScript để trích xuất các giá trị ngày tháng và các phần ngày tháng, v.v. từ một trường.

Bài viết này trình bày 6 cách để trả lại phần năm từ một ngày trong MongoDB.

Dữ liệu mẫu

Giả sử chúng ta có một bộ sưu tập có tên là cats với các tài liệu sau:

{ "_id" : 1, "name" : "Scratch", "born" : ISODate("2021-01-03T23:30:15.123Z") }
{ "_id" : 2, "name" : "Meow", "born" : ISODate("2019-12-08T04:00:12Z") }
{ "_id" : 3, "name" : "Fluffy", "born" : ISODate("2020-09-24T10:30:00Z") }

Các ví dụ sau minh họa các tùy chọn khác nhau để trả về phần năm từ born lĩnh vực của các tài liệu đó.

$year Nhà điều hành

$year toán tử là lựa chọn rõ ràng nhất để trích xuất phần năm từ một ngày. Nó được thiết kế đặc biệt để trả về một tài liệu có phần năm của ngày.

Chúng ta có thể chạy đoạn mã sau để trả về năm từ born trong tài liệu trên.

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          birthYear: { $year: "$born" }
        }
    }
  ]
)

Kết quả:

{ "birthYear" : 2021 }
{ "birthYear" : 2019 }
{ "birthYear" : 2020 }

Bạn cũng có thể chỉ định múi giờ khi sử dụng $year nhà điều hành.

Xem MongoDB $year để biết thêm thông tin và ví dụ.

$dateToString Nhà điều hành

$dateToString toán tử chuyển đổi một đối tượng ngày thành một chuỗi theo định dạng do người dùng chỉ định. Do đó, người dùng có thể chỉ định rằng chỉ phần năm được trả lại nếu được yêu cầu.

Có các chỉ định định dạng cho từng phần ngày tháng. %Y định dạng định dạng trả về năm.

Ví dụ:

db.cats.aggregate(
   [
     {
       $project: {
         _id: 0,
          birthYear: { $dateToString: { format: "%Y", date: "$born" } }
       }
     }
   ]
)

Kết quả:

{ "birthYear" : "2021" }
{ "birthYear" : "2019" }
{ "birthYear" : "2020" }

Chúng tôi có thể đã cung cấp nhiều mã định dạng hơn để bao gồm các phần ngày trong kết quả, nhưng vì chúng tôi chỉ quan tâm đến việc trích xuất năm trong bài viết này nên chúng tôi chỉ sử dụng một mã định dạng.

Xem MongoDB $dateToString để biết thêm thông tin và ví dụ.

$dateToParts Nhà điều hành

$dateToParts toán tử trả về một tài liệu có chứa các phần cấu thành của một giá trị Ngày BSON đã cho dưới dạng các thuộc tính riêng lẻ. Các thuộc tính được trả về là year , month , day , hour , minute , secondmillisecond .

Được trang bị kiến ​​thức này, chúng ta có thể sử dụng $dateToParts trong một giai đoạn đường ống, sau đó thêm một giai đoạn đường ống khác trích xuất year một phần.

Đây là những gì $dateToParts trả lại cho ba tài liệu của chúng tôi:

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          dateParts: { $dateToParts: { date: "$born" } }
        }
    }
  ]
).pretty()

Kết quả:

{
	"dateParts" : {
		"year" : 2021,
		"month" : 1,
		"day" : 3,
		"hour" : 23,
		"minute" : 30,
		"second" : 15,
		"millisecond" : 123
	}
}
{
	"dateParts" : {
		"year" : 2019,
		"month" : 12,
		"day" : 8,
		"hour" : 4,
		"minute" : 0,
		"second" : 12,
		"millisecond" : 0
	}
}
{
	"dateParts" : {
		"year" : 2020,
		"month" : 9,
		"day" : 24,
		"hour" : 10,
		"minute" : 30,
		"second" : 0,
		"millisecond" : 0
	}
}

Dữ liệu này có thể được chuyển sang giai đoạn tiếp theo trong đường dẫn để chỉ trích xuất year trường.

Đây là những gì sẽ xảy ra nếu chúng tôi thêm một dự báo khác chỉ cho year lĩnh vực:

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          dateParts: { $dateToParts: { date: "$born" } }
        }
    },
    {
      $project:
        {
          birthYear: "$dateParts.year"
        }
    }
  ]
)

Kết quả:

{ "birthYear" : 2021 }
{ "birthYear" : 2019 }
{ "birthYear" : 2020 }

Điều này rõ ràng là không ngắn gọn như sử dụng các tùy chọn trước đó. Tuy nhiên, tùy thuộc vào những gì bạn đang làm trong quy trình của mình, phương pháp này có thể là một lựa chọn hữu ích.

$dateToParts toán tử cũng chấp nhận một iso8601 tham số này sửa đổi tài liệu đầu ra để sử dụng các trường ngày theo tuần ISO.

Xem MongoDB $dateToParts để biết thêm thông tin và ví dụ.

forEach() Phương pháp

Bạn có thể sử dụng cursor.forEach() để lặp lại qua con trỏ, sử dụng phương thức JavaScript như getFullYear() hoặc getUTCFullYear() để chỉ trả về giá trị năm.

db.cats.find().forEach(
  function(c) {
    print(
      c.born.getFullYear()
      );
  }
);

Kết quả:

2021
2019
2020

Các tùy chọn trước đó trả về toàn bộ tài liệu có chứa một cặp tên / giá trị. Tùy chọn này chỉ trả về giá trị năm thực chứ không phải toàn bộ tài liệu.

map() Phương pháp

cursor.map() phương thức áp dụng một hàm cho mỗi tài liệu được con trỏ truy cập và kết hợp các giá trị thành một mảng.

Ví dụ:

db.cats.find().map(
  function(c) {
    c = c.born.getFullYear();
    return c;
  }
);

Kết quả:

[ 2021, 2019, 2020 ]

$isoWeekYear Nhà điều hành

Nếu bạn cần trả lại năm ở định dạng ISO 8601, hãy sử dụng $isoWeekYear . Năm ISO 8601 bắt đầu từ Thứ Hai của tuần 1 và kết thúc vào Chủ Nhật của tuần trước.

Ví dụ:

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          birthIsoWeekYear: { $isoWeekYear: "$born" }
        }
    }
  ]
)

Kết quả:

{ "birthIsoWeekYear" : NumberLong(2020) }
{ "birthIsoWeekYear" : NumberLong(2019) }
{ "birthIsoWeekYear" : NumberLong(2020) }

Lưu ý rằng năm đầu tiên bây giờ là năm 2020 thay vì năm 2021 như trong các ví dụ trước. Không phải tất cả các năm đều khác nhau khi sử dụng $isoWeekYear , vì nó phụ thuộc vào ngày được đề cập.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $ toDecimal

  2. Nhóm các bản ghi theo tháng và đếm chúng - Mongoose, nodeJs, mongoDb

  3. Mẹo nâng cấp lên phiên bản MongoDB mới nhất

  4. Cập nhật trường trong mảng phần tử chính xác trong MongoDB

  5. Tự động tăng trong MongoDB để lưu trữ chuỗi ID người dùng duy nhất