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

5 cách để có được tháng từ một ngày trong MongoDB

MongoDB cung cấp một số toán tử đường ống tổng hợp để làm việc với ngày tháng, bao gồm toán tử trích xuất các phần nhất định của ngày tháng, 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 đó, bạn có thể 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 theo yêu cầu.

Bài viết này trình bày 5 cách để trả lại phần tháng 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 tháng từ born trường của các tài liệu đó.

$month Nhà điều hành

$month toán tử được thiết kế đặc biệt để trả về tài liệu với phần tháng của một ngày nhất định.

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

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

Kết quả:

{ "birthMonth" : 1 }
{ "birthMonth" : 12 }
{ "birthMonth" : 9 }

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

Xem MongoDB $month để 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 tháng đượ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. %m định dạng định dạng trả về tháng.

Ví dụ:

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

Kết quả:

{ "birthMonth" : "01" }
{ "birthMonth" : "12" }
{ "birthMonth" : "09" }

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 tháng 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 .

Do đó, chúng tôi 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 month 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
	}
}

Sau đó, kết quả này có thể được chuyển sang giai đoạn tiếp theo trong đường dẫn để chỉ trích xuất month 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 month lĩnh vực:

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

Kết quả:

{ "birthMonth" : 1 }
{ "birthMonth" : 12 }
{ "birthMonth" : 9 }

Đ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ể phù hợp với hóa đơn.

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 qua con trỏ, sử dụng phương thức JavaScript như getMonth() hoặc getUTCMonth() để chỉ trả về giá trị tháng.

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

Kết quả:

0
11
8

Lưu ý rằng getMonth() Phương thức JavaScript trả về số tháng dưới dạng số nguyên, từ 0 đến 11.

Bạn cũng có thể nhận thấy rằng 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ị, trong khi tùy chọn này chỉ trả về giá trị tháng thực tế 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.getMonth();
    return c;
  }
);

Kết quả:

[ 0, 11, 8 ] 

Một lần nữa, chúng tôi lấy các tháng dưới dạng số nguyên từ 0 đến 11.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Các trường cập nhật MongoDB trong mảng lồng nhau

  2. Làm cách nào để nối các mảng từ nhiều tài liệu trong MongoDB?

  3. Mongoose:Nhận danh sách người dùng đầy đủ

  4. MongoDB Ruby Driver 2.5.x Vấn đề phân biệt chữ hoa chữ thường với tên máy chủ trên bộ bản sao

  5. 5 cách để có được một giờ cho một buổi hẹn hò trong MongoDB