Professional Documents
Culture Documents
Document trong MongoDB có dạng JSON. Document đặt trong {}, chứa các cặp key:
value, xem hình sau:
B/. Phương thức insertMany: có thể thêm nhiều document (nhấn Ctrl + C để bỏ qua lệnh)
db.COLLECTION_NAME.insertMany(document)
document có dạng mảng JSON:
[{key1:value, key2: value, …}, {key1:value, key2: value, …}, … {key1:value, key2:
value, …}]
2
... ])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("60af9ad6569ef5175a5f280b"),
ObjectId("60af9ad6569ef5175a5f280c"),
ObjectId("60af9ad6569ef5175a5f280d"),
ObjectId("60af9ad6569ef5175a5f280e"),
ObjectId("60af9ad6569ef5175a5f280f")
]
}
> db.Persons.find()
{ "_id" : ObjectId("60af9ad6569ef5175a5f280b"), "name" : "Võ Đại Lộc", "age" : 20 }
{ "_id" : ObjectId("60af9ad6569ef5175a5f280c"), "name" : "Nguyễn Văn Trọng", "age" :
45 }
{ "_id" : ObjectId("60af9ad6569ef5175a5f280d"), "name" : "Trần Lực", "age" : 24 }
{ "_id" : ObjectId("60af9ad6569ef5175a5f280e"), "name" : "Ngô Văn Huân", "age" : 19 }
{ "_id" : ObjectId("60af9ad6569ef5175a5f280f"), "name" : "Phạm Văn Tuấn", "age" : 30 }
3
> var myStudent =
... [
... {"Id": "18115393", "Name": "Trần Long Thành"},
... {"Id": "18115232", "Name": "Phạm Như Ý"},
... {"Id": "18115324", "Name": "Nguyễn Văn Lộc"},
... {"Id": "18115927", "Name": "Lê Thị Hồng"},
... {"Id": "18115225", "Name": "Lê Văn Hưng"},
... {"Id": "18115351", "Name": "Nguyễn Văn Tài"},
... {"Id": "18115931", "Name": "Phạm Phúc Hậu"},
... {"Id": "18115381", "Name": "Trần Hoàng Bắc"},
... {"Id": "18115926", "Name": "Phạm Văn Nam"},
... {"Id": "18115462", "Name": "Ngô Văn Thạnh"}
... ]
> db.Students.insert(myStudent)
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 10,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
> db.Students.find()
Kết quả:
4
B/. Phương thức pretty():dùng hiển thị kết quả theo định dạng
db.COLLECTION_NAME.find().pretty()
5
}
{
"_id" : ObjectId("60af0e71c58ae5adace0f8d0"),
"Id" : "18115225",
"Name" : "Lê Văn Hưng"
}
{
"_id" : ObjectId("60af0e71c58ae5adace0f8d1"),
"Id" : "18115351",
"Name" : "Nguyễn Văn Tài"
}
{
"_id" : ObjectId("60af0e71c58ae5adace0f8d2"),
"Id" : "18115931",
"Name" : "Phạm Phúc Hậu"
}
{
"_id" : ObjectId("60af0e71c58ae5adace0f8d3"),
"Id" : "18115381",
"Name" : "Trần Hoàng Bắc"
}
{
"_id" : ObjectId("60af0e71c58ae5adace0f8d4"),
"Id" : "18115926",
"Name" : "Phạm Văn Nam"
}
{
"_id" : ObjectId("60af0e71c58ae5adace0f8d5"),
"Id" : "18115462",
"Name" : "Ngô Văn Thạnh"
6
}
Có thể dùng lệnh sau: > db.Students.find().forEach(printjson), cũng có kết quả như trên.
C/. Phương thức find({ }): sẽ hiển thị tất cả các tài liệu thỏa nội dung tìm kiếm.
db.COLLECTION_NAME.find({ nội dung tìm })
Ngoài phương thức find (), còn có phương thức findOne({ }), chỉ trả về một tài liệu.
db.COLLECTION_NAME.findOne({ nội dung tìm })
nội dung tìm: có dạng {key: value, …} là các điều kiện tìm kiếm.
Vd: tìm theo Id, Name đơn giản.
> db.Students.find({"Name": "Nguyễn Văn Tài"})
{ "_id" : ObjectId("60af0e71c58ae5adace0f8d1"), "Id" : "18115351", "Name" : "Nguyễn
Văn Tài" }
> db.Students.find({"Id": "18115999"}) ‘tìm không thấy’
>
> db.Students.find({"Id": "18115225"})
{ "_id" : ObjectId("60af0e71c58ae5adace0f8d0"), "Id" : "18115225", "Name" : "Lê Văn
Hưng" }
7
Less Than {<key>:{$lte:<value>}} db.mycol.find({"likes": where likes <=
Equals {$lte:50}}).pretty() 50
8
…{maso: "1022", hoten: "Nguyễn Văn Hùng", ns:"02/05/1972", gt: "Nam", ml: 1050,
tinhtp: "Long An"},
... {maso: "1023", hoten: "Nguyễn Văn Chương", ns: "12/09/1969", gt: "Nam", ml: 1000,
tinhtp: "Bình Dương"},
... {maso: "1024", hoten: "Nguyễn Thị Sinh", ns: "24/02/1978", gt: "Nữ", ml: 950, tinhtp:
"Bình Phước"},
... {maso: "1025", hoten: "Lê Thị Bảy", ns: "02/08/1969", gt: "Nữ", ml: 990, tinhtp: "Tiền
Giang"},
... {maso: "1026", hoten: "Trần Văn Toàn", ns: "10/07/1980", gt: "Nam", ml: 1000, tinhtp:
"Đồng Nai"},
... {maso: "1027", hoten: "Phạm Thị Anh Thư", ns: "02/05/1979", gt: "Nữ", ml: 1250,
tinhtp: "Sài Gòn"},
... {maso: "1028", hoten: "Nguyễn Văn Minh", ns: "15/06/1969", gt: "Nam", ml: 1450,
tinhtp: "Sài Gòn"},
... {maso: "1029", hoten: "Ngô Thị Bách", ns: "12/03/1978", gt: "Nữ", ml: 1450, tinhtp: "Sài
Gòn"},
... {maso: "1030", hoten: "Lê Văn Định", ns: "25/02/1981", gt: "Nam", ml: 1350, tinhtp:
"Long An"}
... ]
> db.NhanVien.insert(arr)
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 10,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
> db.NhanVien.find()
Vd:
9
‘tìm nhân viên có tỉnh tp là Sài Gòn
> db.NhanVien.find({"tinhtp": "Sài Gòn"})
‘tìm nhân viên tên Nguyễn Văn Chương
> db.NhanVien.find({hoten: "Nguyễn Văn Chương"})
‘tìm nhân viên có họ tên chứa chữ ‘Văn’
> db.NhanVien.find({hoten: /Văn/})
‘tìm nhân viên có họ tên bắt đầu bởi ký tự ‘N’
> db.NhanVien.find({hoten: /^N/})
‘tìm nhân viên có họ tên kết thúc bởi ký tự ‘g’
> db.NhanVien.find({hoten: /g$/})
‘tìm nhân viên sinh ngày 02/08/1969
> db.NhanVien.find({ns: "02/08/1969"})
‘tìm nhân viên có mức lương > 1000
> db.NhanVien.find({ml: {$gt:1000}})
‘tìm nhân viên có mức lương < 1200
> db.NhanVien.find({ml: {$lt:1200}})
‘tìm nhân viên có tỉnh tp có trong 3 tỉnh "Long An", "Bình Dương","Sài Gòn"
> db.NhanVien.find({tinhtp: {$in: ["Long An", "Bình Dương","Sài Gòn"]}})
‘tìm nhân viên có tỉnh tp không có trong 4 tỉnh "Long An", "Bình Dương","Sài Gòn",
"Tiền Giang", hiển thị theo định dạng JSON
> db.NhanVien.find({tinhtp: {$nin: ["Long An", "Bình Dương","Sài Gòn", “Tiền
Giang”]}}).pretty()
10
‘tìm nhân viên có giới tính nam và mức lương >1200.
> db.NhanVien.find({$and: [{gt: "Nam", ml: {$gt: 1200}}]})
‘tìm nhân viên có tỉnh tp là Sài Gòn hoặc Bình Dương
> db.NhanVien.find({$or: [{tinhtp: "Sài Gòn"},{tinhtp: "Bình Dương"}]})
‘tìm nhân viên Nữ và có tỉnh tp là Sài Gòn hoặc Bình Dương
> db.NhanVien.find({gt: "Nữ", $or: [{tinhtp: "Sài Gòn"},{tinhtp: "Bình Dương"}]})
> db.NhanVien.find({$nor: [{tinhtp: "Sài Gòn"}]}).pretty()
> db.NhanVien.find({$nor: [{tinhtp: "Sài Gòn"}, {tinhtp:"Long An"}]}).pretty()
> db.NhanVien.find({ml: {$gt: 1000}, $nor: [{tinhtp: "Sài Gòn"}, {tinhtp:"Long
An"}]}).pretty()
11
‘sửa tên tỉnh tp Long An Tân An, chỉ sửa 01 document đầu tiên tìm thấy
B/. Phương thức save():Phương thức save () thay thế tài liệu hiện có bằng tài liệu mới được
truyền vào phương thức save.
db.COLLECTION_NAME.save({_id:ObjectId(), New_Data})
_id:ObjectId(): là trường được tạo bởi MongoDB khi chèn dữ liệu mới.
New_Data: dữ liệu mới là document mới
Vd: dữ liệu của collection NhanVien như sau:
{ "_id" : ObjectId("60af1c39c58ae5adace0f8d6"), "maso" : "1021", "hoten" : "Hoàng Văn
Tùng", "ns" : "12/02/1970", "gt" : "Nam", "ml" : 1200, "tinhtp" : "Hà Nội" }
{ "_id" : ObjectId("60af1c39c58ae5adace0f8d7"), "maso" : "1022", "hoten" : "Nguyễn Văn
Hùng", "ns" : "02/05/1972", "gt" : "Nam", "ml" : 1050, "tinhtp" : "Long An" }
{ "_id" : ObjectId("60af1c39c58ae5adace0f8d8"), "maso" : "1023", "hoten" : "Nguyễn Văn
Chương", "ns" : "12/09/1969", "gt" : "Nam", "ml" : 1000, "tinhtp" : "Bình Dương" }
{ "_id" : ObjectId("60af1c39c58ae5adace0f8d9"), "maso" : "1024", "hoten" : "Nguyễn Thị
Sinh", "ns" : "24/02/1978", "gt" : "Nữ", "ml" : 950, "tinhtp" : "Bình Phước" }
{ "_id" : ObjectId("60af1c39c58ae5adace0f8da"), "maso" : "1025", "hoten" : "Lê Thị Bảy",
"ns" : "02/08/1969", "gt" : "Nữ", "ml" : 990, "tinhtp" : "Tiền Giang" }
{ "_id" : ObjectId("60af1c39c58ae5adace0f8db"), "maso" : "1026", "hoten" : "Trần Văn
Toàn", "ns" : "10/07/1980", "gt" : "Nam", "ml" : 1000, "tinhtp" : "Đồng Nai" }
{ "_id" : ObjectId("60af1c39c58ae5adace0f8dc"), "maso" : "1027", "hoten" : "Phạm Thị
Anh Thư", "ns" : "02/05/1979", "gt" : "Nữ", "ml" : 1250, "tinhtp" : "Tp Hồ Chí Minh" }
12
{ "_id" : ObjectId("60af1c39c58ae5adace0f8dd"), "maso" : "1028", "hoten" : "Nguyễn Văn
Minh", "ns" : "15/06/1969", "gt" : "Nam", "ml" : 1450, "tinhtp" : "Tp Hồ Chí Minh" }
{ "_id" : ObjectId("60af1c39c58ae5adace0f8de"), "maso" : "1029", "hoten" : "Ngô Thị Bích
Hòa", "ns" : "12/03/1978", "gt" : "Nữ", "ml" : 1450, "tinhtp" : "Tp Hồ Chí Minh" }
{ "_id" : ObjectId("60af1c39c58ae5adace0f8df"), "maso" : "1030", "hoten" : "Lê Văn
Định", "ns" : "25/02/1981", "gt" : "Nam", "ml" : 1350, "tinhtp" : "Long An" }
Thực hiện thay dữ liệu có "_id" : ObjectId("60af1c39c58ae5adace0f8d6" bằng dữ liệu mới.
> db.NhanVien.save({_id: ObjectId("60af1c39c58ae5adace0f8d6"), maso: "1050",
hoten: "Hồ Chí Hiếu", ns: "25/12/1978", gt: "Nam", ml: 999, tinhtp: "Bắc Giang"})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.NhanVien.find() ‘kiểm tra lại kết quả
C/. Phương thức findOneAndUpdate(): Phương thức findOneAndUpdate() thực hiện tìm
và cập nhật chỉ 1 document.
db.COLLECTION_NAME.findOneAndUpdate({Selection_Criteria}, {$set: {Updated
Data}})
Vd: tạo collection MonHoc trên db2, nhập 7 document cho MonHoc và sửa Tin học đại
cương Nhập môn CNTT và sotc = 3.
> use db2
switched to db db2
> db.createCollection("MonHoc")
{ "ok" : 1 }
> db.MonHoc.insertMany([
... {mamh: "001", tenmh: "Toán cao cấp A1", sotc: 3},
... {mamh: "002", tenmh: "Toán cao cấp A2", sotc: 2},
... {mamh: "003", tenmh: "Tin học đại cương", sotc: 4},
... {mamh: "004", tenmh: "Tin học văn phòng", sotc: 4},
... {mamh: "005", tenmh: "Lập trình cơ bản", sotc: 4},
... {mamh: "006", tenmh: "Kỹ thuật lập trình", sotc: 4},
... {mamh: "007", tenmh: "Cơ sở dữ liệu 1", sotc: 3},
... {mamh: "008", tenmh: "Cơ sở dữ liệu 2", sotc: 4}
13
... ])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("60afa4cf569ef5175a5f2810"),
ObjectId("60afa4cf569ef5175a5f2811"),
ObjectId("60afa4cf569ef5175a5f2812"),
ObjectId("60afa4cf569ef5175a5f2813"),
ObjectId("60afa4cf569ef5175a5f2814"),
ObjectId("60afa4cf569ef5175a5f2815"),
ObjectId("60afa4cf569ef5175a5f2816"),
ObjectId("60afa4cf569ef5175a5f2817")
]
}
> db.MonHoc.find()
{ "_id" : ObjectId("60afa4cf569ef5175a5f2810"), "mamh" : "001", "tenmh" : "Toán cao cấp
A1", "sotc" : 3 }
{ "_id" : ObjectId("60afa4cf569ef5175a5f2811"), "mamh" : "002", "tenmh" : "Toán cao cấp
A2", "sotc" : 2 }
{ "_id" : ObjectId("60afa4cf569ef5175a5f2812"), "mamh" : "003", "tenmh" : "Tin học đại
cương", "sotc" : 4 }
{ "_id" : ObjectId("60afa4cf569ef5175a5f2813"), "mamh" : "004", "tenmh" : "Tin học văn
phòng", "sotc" : 4 }
{ "_id" : ObjectId("60afa4cf569ef5175a5f2814"), "mamh" : "005", "tenmh" : "Lập trình cơ
bản", "sotc" : 4 }
{ "_id" : ObjectId("60afa4cf569ef5175a5f2815"), "mamh" : "006", "tenmh" : "Kỹ thuật lập
trình", "sotc" : 4 }
{ "_id" : ObjectId("60afa4cf569ef5175a5f2816"), "mamh" : "007", "tenmh" : "Cơ sở dữ liệu
1", "sotc" : 3 }
{ "_id" : ObjectId("60afa4cf569ef5175a5f2817"), "mamh" : "008", "tenmh" : "Cơ sở dữ liệu
2", "sotc" : 4 }
> db.MonHoc.findOneAndUpdate(
14
... {tenmh: "Tin học đại cương"}, {$set: {tenmh: "Nhập môn CNTT", sotc: 3}})
{
"_id" : ObjectId("60afa4cf569ef5175a5f2812"),
"mamh" : "003",
"tenmh" : "Tin học đại cương",
"sotc" : 4
}
> db.MonHoc.find() ‘kiểm tra lại kết quả
D/. Phương thức updateOne():Phương thức updateOne() thực hiện cập nhật 1 document.
db.COLLECTION_NAME.updateOne({Selection_Criteria}, {$set: {Updated Data}})
15
{ "_id" : ObjectId("60afa4cf569ef5175a5f2817"), "mamh" : "008", "tenmh" : "Cơ sở dữ liệu
2", "sotc" : 4 }
E/. Phương thức updateMany():Phương thức updateMany() thực hiện cập nhật đồng thời
nhiều document.
db.COLLECTION_NAME.updateMany({Selection_Criteria}, {$set: {Updated Data}})
https://www.tutorialspoint.com/mongodb/mongodb_update_document.htm
Vd: xóa các nhân viên có tỉnh tp Long An (mặc định justOne là 0: xóa nhiều)
> db.NhanVien.remove({tinhtp: "Long An"})
WriteResult({ "nRemoved" : 2 })
> db.NhanVien.find() ‘kiểm tra lại kết quả
Vd: xóa toàn bộ nhân viên. {} nghĩa là không có điều kiện
> db.NhanVien.remove({})
WriteResult({ "nRemoved" : 2 })
5/. Projection:
Là phép chiếu trên collection (chọn hiện / ẩn các cột) theo điều kiện. MongoDB dùng
phương thức find() với cú pháp sau:
db.COLLECTION_NAME.find({Selection Criteria},{key: 1/0})
Selection Criteria: điều kiện chọn document, nếu đặt là {} nghĩa là chọn tất cả
Key: 1 hoặc 0: hiện hoặc ẩn field / cột tương ứng
Vd:
> use db2
> db.NhanVien.find({}, {maso: 1, hoten: 1}) ‘hiện 2 cột maso hoten
{ "_id" : ObjectId("60af1c39c58ae5adace0f8d6"), "maso" : "1050", "hoten" : "Hồ Chí Hiếu"
}
{ "_id" : ObjectId("60af1c39c58ae5adace0f8d8"), "maso" : "1023", "hoten" : "Nguyễn Văn
Chương" }
17
{ "_id" : ObjectId("60af1c39c58ae5adace0f8d9"), "maso" : "1024", "hoten" : "Nguyễn Thị
Sinh" }
{ "_id" : ObjectId("60af1c39c58ae5adace0f8db"), "maso" : "1026", "hoten" : "Trần Văn
Toàn" }
{ "_id" : ObjectId("60af1c39c58ae5adace0f8dc"), "maso" : "1027", "hoten" : "Phạm Thị
Anh Thư" }
{ "_id" : ObjectId("60af1c39c58ae5adace0f8dd"), "maso" : "1028", "hoten" : "Nguyễn Văn
Minh" }
{ "_id" : ObjectId("60af1c39c58ae5adace0f8de"), "maso" : "1029", "hoten" : "Ngô Thị Bích
Hòa" }
‘chọn giới tính Nam và hiện 2 cột maso, hoten
> db.NhanVien.find({gt: "Nam"}, {maso: 1, hoten: 1})
{ "_id" : ObjectId("60af1c39c58ae5adace0f8d6"), "maso" : "1050", "hoten" : "Hồ Chí Hiếu"
}
{ "_id" : ObjectId("60af1c39c58ae5adace0f8d8"), "maso" : "1023", "hoten" : "Nguyễn Văn
Chương" }
{ "_id" : ObjectId("60af1c39c58ae5adace0f8db"), "maso" : "1026", "hoten" : "Trần Văn
Toàn" }
{ "_id" : ObjectId("60af1c39c58ae5adace0f8dd"), "maso" : "1028", "hoten" : "Nguyễn Văn
Minh" }
6/. Limit:
Để giới hạn các document (bản ghi / record) trong MongoDB, ta có thể sử dụng phương
thức limit () theo sau phương thức find(). Phương thức limit chấp nhận một tham số kiểu số,
là số lượng document mà ta muốn được hiển thị.
db.COLLECTION_NAME.find().limit(Number)
18
{ "_id" : ObjectId("60af1c39c58ae5adace0f8d9"), "maso" : "1024", "hoten" : "Nguyễn Thị
Sinh", "ns" : "24/02/1978", "gt" : "Nữ", "ml" : 950, "tinhtp" : "Bình Phước" }
7/. Sort:
Để sắp xếp các documnet trong MongoDB, Ta cần sử dụng phương thức sort () theo sau
phương thức find(). Phương thức nhận một danh sách các trường / cột cùng với thứ tự sắp
xếp của chúng. Để chỉ định thứ tự sắp xếp 1 và -1 được sử dụng. 1 được sử dụng cho thứ tự
tăng dần trong và -1 được sử dụng cho thứ tự giảm dần.
db.COLLECTION_NAME.find().sort({Key:1/-1})
19
Vd: ẩn cột _id, hiện maso, hoten, ml của nhân viên với ml tăng dần
> db.NhanVien.find({ },{_id: 0, maso: 1, hoten: 1, ml: 1}).sort({ml: 1})
{ "maso" : "1024", "hoten" : "Nguyễn Thị Sinh", "ml" : 950 }
{ "maso" : "1050", "hoten" : "Hồ Chí Hiếu", "ml" : 999 }
{ "maso" : "1023", "hoten" : "Nguyễn Văn Chương", "ml" : 1000 }
{ "maso" : "1026", "hoten" : "Trần Văn Toàn", "ml" : 1000 }
{ "maso" : "1027", "hoten" : "Phạm Thị Anh Thư", "ml" : 1250 }
{ "maso" : "1028", "hoten" : "Nguyễn Văn Minh", "ml" : 1450 }
{ "maso" : "1029", "hoten" : "Ngô Thị Bích Hòa", "ml" : 1450 }
8/. Indexing:
Các chỉ mục hỗ trợ giải quyết các truy vấn hiệu quả. Không có chỉ mục, MongoDB phải
quét mọi document của collection để chọn những document phù hợp với câu lệnh truy vấn.
Quá trình quét này rất thốn thời gian, kém hiệu quả và yêu cầu MongoDB xử lý một khối
lượng lớn dữ liệu.
Chỉ mục là cấu trúc dữ liệu đặc biệt, lưu trữ một phần nhỏ của tập dữ liệu ở dạng dễ xem
qua. Chỉ mục lưu trữ giá trị của một trường cụ thể hoặc tập hợp các trường, được sắp xếp
theo giá trị của trường như được chỉ định trong chỉ mục.
A/. Tạo chỉ mục:
Cú pháp cơ bản của phương thức createIndex () như sau ():
db.COLLECTION_NAME.createIndex ({Key: 1 / -1})
Key là tên của trường / cột mà bạn muốn tạo chỉ mục và 1 là cho thứ tự tăng dần và -1 là chỉ
mục giảm dần.
Vd: tạo chỉ mục
> db.NhanVien.createIndex({hoten: 1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 2,
"numIndexesAfter" : 3,
"ok" : 1
}
20
Vd: tạo chỉ mục
> db.NhanVien.createIndex({maso:1, ml: -1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
22
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 2,
"numIndexesAfter" : 3,
"ok" : 1
}
> db.NhanVien.getIndexes()
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
},
{
"v" : 2,
"key" : {
"hoten" : 1
},
"name" : "hoten_1"
},
{
"v" : 2,
"key" : {
"maso" : 1,
"ml" : -1
},
"name" : "maso_1_ml_-1"
}
]
23
Đọc thêm về Date trong MongoDB:
https://docs.mongodb.com/manual/reference/method/Date/
Behavior
Internally, Date objects are stored as a signed 64-bit integer representing the number of
milliseconds since the Unix epoch (Jan 1, 1970).
24
Not all database operations and drivers support the full 64-bit range. You may safely work
with dates with years within the inclusive range 0 through 9999.
Bên trong, các đối tượng Ngày được lưu trữ dưới dạng số nguyên 64 bit có dấu đại diện cho
số mili giây kể từ kỷ nguyên Unix (ngày 1 tháng 1 năm 1970). Không phải tất cả các hoạt
động cơ sở dữ liệu và trình điều khiển đều hỗ trợ phạm vi 64-bit đầy đủ. Ta có thể làm việc
an toàn với các ngày có năm trong phạm vi bao gồm từ 0 đến 9999
Examples
25