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

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

Bài viết này trình bày 5 cách để trả về phần mili giây từ đối tượng Date 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:20.112Z") }
{ "_id" : 3, "name" : "Fluffy", "born" : ISODate("2020-09-24T10:45:01.007Z") }

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

$millisecond Nhà điều hành

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

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

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

Kết quả:

{ "birthMillisecond" : 123 }
{ "birthMillisecond" : 112 }
{ "birthMillisecond" : 7 }

$millisecond toán tử cũng chấp nhận timezone lý lẽ.

Xem MongoDB $millisecond để 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 mili giây được trả về nếu được yêu cầu.

Có các chỉ định định dạng cho từng phần ngày tháng. %L định dạng chỉ định trả về phần mili giây (3 chữ số, không đệm).

Ví dụ:

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

Kết quả:

{ "birthMillisecond" : "123" }
{ "birthMillisecond" : "112" }
{ "birthMillisecond" : "007" }

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 millisecond 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" : 20,
		"millisecond" : 112
	}
}
{
	"dateParts" : {
		"year" : 2020,
		"month" : 9,
		"day" : 24,
		"hour" : 10,
		"minute" : 45,
		"second" : 1,
		"millisecond" : 7
	}
}

Kết quả này sau đó có thể được chuyển sang giai đoạn tiếp theo trong đường dẫn và do đó chúng tôi có thể trích xuất chỉ millisecond trong giai đoạn tiếp theo.

Đây là những gì sẽ xảy ra nếu chúng tôi thêm một phép chiếu khác chỉ trong millisecond lĩnh vực:

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

Kết quả:

{ "birthMillisecond" : 123 }
{ "birthMillisecond" : 112 }
{ "birthMillisecond" : 7 }

Vì vậy, bất cứ khi nào bạn sử dụng $dateToParts trong đường dẫn của mình, bạn sẽ có quyền truy cập vào millisecond trường (và các phần ngày tháng khác) trong giai đoạn tiếp theo.

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ư getMilliseconds() hoặc getUTCMilliseconds() chỉ trả về mili giây.

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

Kết quả:

123
112
7

getUTCSeconds() Phương thức JavaScript trả về một số nguyên, từ 0 đến 999, đại diện cho phần mili giây của đối tượng ngày tháng nhất định.

getMilliseconds() phương thức trả về nó theo giờ địa phương.

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ị mili giây 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.getUTCMilliseconds();
    return c;
  }
);

Kết quả:

[ 123, 112, 7 ]


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để cập nhật các trường tài liệu MongoDB chỉ khi chúng không tồn tại?

  2. Node.js - Tạo mối quan hệ với Mongoose

  3. Liệt kê tin nhắn cuối cùng của mỗi cuộc trò chuyện, liên quan đến người dùng, trong MongoDB

  4. MongoError:không kết nối được với máy chủ trong lần kết nối đầu tiên

  5. Làm cách nào để tôi có thể xây dựng một chương trình bằng cách sử dụng trình điều khiển c ++ của mongodb?