You are on page 1of 25

Chương 3: THAO TÁC DỮ LIỆU

1/. Insert Document:


MongoDB sử dụng phương thức insert () để thêm 1 document vào collection.
A/. Phương thức insert: chỉ thêm 1 document
db.COLLECTION_NAME.insert(document)

Document trong MongoDB có dạng JSON. Document đặt trong {}, chứa các cặp key:
value, xem hình sau:

Vd: tạo Collect_1, thêm 1 document (nhấn Ctrl + C để bỏ qua lệnh)


> use db1
switched to db db1
> db.createCollection("Collect_1")
{ "ok" : 1 }
> db.Collect_1.insert(
... {item:"Canvas", qty: 100, tags: ["cotton","PVC","metal"],
... size: {h: 20, w: 15, m:"cm"}
... }
... )
WriteResult({ "nInserted" : 1 })

Vd: thêm 2 document nữa và xem lại bằng db.Collect_1.find()


> db.Collect_1.insert({item: "Table AI", qty: 100, tags: ["wood", "PVC", "metal"],
size: {h: 20, w:15, m:"inch"}})
1
WriteResult({ "nInserted" : 1 })
> db.Collect_1.insert({item: "Ladder", qty:30, tags: ["Alu", "PVC"], size: {h: 20,
w:15, m:"inch"}})
WriteResult({ "nInserted" : 1 })
> db.Collect_1.find()
{ "_id" : ObjectId("60ae0a0b3a505561311a937d"), "item" : "Canvas", "qty" : 100, "tags" : [
"cotton", "PVC", "metal" ], "size" : { "h" : 20, "w" : 15, "m" : "cm" } }
{ "_id" : ObjectId("60ae10c73a505561311a9380"), "item" : "Table AI", "qty" : 100, "tags" :
[ "wood", "PVC", "metal" ], "size" : { "h" : 20, "w" : 15, "m" : "inch" } }
{ "_id" : ObjectId("60ae11013a505561311a9381"), "item" : "Ladder", "qty" : 30, "tags" :
[ "Alu", "PVC" ], "size" : { "h" : 20, "w" : 15, "m" : "inch" } }

Giải thích kết quả hiển thị:


"_id" : ObjectId("60ae0a0b3a505561311a937d"): là thuộc tính / field / cột nhận diện do
MongoDB tạo ra để phân biệt các document với nhau.

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, …}]

Vd: thêm 5 document


> db.createCollection("Persons")
{ "ok" : 1 }
> db.Persons.insertMany([
... {name: "Võ Đại Lộc", age: 20},
... {name: "Nguyễn Văn Trọng", age: 45},
... {name: "Trần Lực", age: 24},
... {name: "Ngô Văn Huân", age: 19},
... {name: "Phạm Văn Tuấn", age: 30}

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 }

2/. Query Document:


Để truy vấn dữ liệu từ bộ sưu tập MongoDB, ta cần sử dụng phương thức find () của
MongoDB.
A/. Phương thức find(): sẽ hiển thị tất cả các tài liệu theo cách không có cấu trúc.
db.COLLECTION_NAME.find()
Vd: Tạo csdl db2, tạo collection Students, tạo mảng myStudent chứa 10 sinh viên, nhập
dữ liệu vào Students từ mảng, hiển thị dữ liệu bằng phương thức find().
> use db2
switched to db db2
> db.createCollection("Students")
{ "ok" : 1 }

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()

Vd: dựa theo dữ liệu của ví dụ trước


> db.Students.find().pretty()
{
"_id" : ObjectId("60af0e71c58ae5adace0f8cc"),
"Id" : "18115393",
"Name" : "Trần Long Thành"
}
{
"_id" : ObjectId("60af0e71c58ae5adace0f8cd"),
"Id" : "18115232",
"Name" : "Phạm Như Ý"
}
{
"_id" : ObjectId("60af0e71c58ae5adace0f8ce"),
"Id" : "18115324",
"Name" : "Nguyễn Văn Lộc"
}
{
"_id" : ObjectId("60af0e71c58ae5adace0f8cf"),
"Id" : "18115927",
"Name" : "Lê Thị Hồng"

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" }

D/. Các phép toán:


Để truy vấn document trên cơ sở một số điều kiện, ta có thể sử dụng các phép toán
sau:

Operation Syntax Example RDBMS


Equivalent

Equality {<key>:{$eq:<value>}} db.mycol.find({"by":"tutorials where by =


point"}).pretty() 'tutorials point'

Less Than {<key>:{$lt:<value>}} db.mycol.find({"likes": where likes < 50


{$lt:50}}).pretty()

7
Less Than {<key>:{$lte:<value>}} db.mycol.find({"likes": where likes <=
Equals {$lte:50}}).pretty() 50

Greater {<key>:{$gt:<value>}} db.mycol.find({"likes": where likes > 50


Than {$gt:50}}).pretty()

Greater {<key>: db.mycol.find({"likes": where likes >=


Than {$gte:<value>}} {$gte:50}}).pretty() 50
Equals

Not {<key>:{$ne:<value>}} db.mycol.find({"likes": where likes !=


Equals {$ne:50}}).pretty() 50

Values in {<key>:{$in:[<value1>, db.mycol.find({"name":{$in: Where name


an array <value2>,…… ["Raj", "Ram", matches any of
<valueN>]}} "Raghu"]}}).pretty() the value in :
["Raj", "Ram",
"Raghu"]

Values not {<key>: db.mycol.find({"name":{$nin: Where name


in an array {$nin:<value>}} ["Ramu", "Raghav"]}}).pretty() values is not in
the array :
["Ramu",
"Raghav"] or,
doesn’t exist at
all

Value {<key>:{$exists: true / db.mydb.find( {"comment": Giá trị có tồn tại


exists false}} { $exists: true }}) không?

Vd: tạo Collection chứa dữ liệu để minh họa.


> db.createCollection("Emps")
{ "ok" : 1 }
> var arr =
…[
…{maso: "1021", hoten: "Hoàng Văn Tùng", ns:"12/02/1970", gt: "Nam", ml: 1200, tinhtp:
"Hà Nội"},

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()

E/. Phép AND, OR, NOT, NOR:


db.COLLECTION_NAME.find({$and: [{<key1>:<value1>}, {<key2>:<value2>}]})
db.COLLECTION_NAME.find({$or: [{<key1>:<value1>}, {<key2>:<value2>}]})
db.COLLECTION_NAME.find({$nor: [{<key1>:<value1>}, {<key2>:<value2>}]})
Vd: sinh viên giải thích ví dụ
‘tìm nhân viên có tỉnh tp là Sài Gòn và gt là Nữ.
> db.NhanVien.find({$and: [{tinhtp: "Sài Gòn"},{gt: "Nữ"}]})

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()

Buổi 3 _ học đến đây


3/. Update Document:
Các phương thức update () và save () của MongoDB được sử dụng để cập nhật tài liệu vào
một Collection.
A/. Phương thức update (): cập nhật các giá trị trong Document hiện có trong khi phương
thức save () thay thế Document hiện có bằng tài liệu được truyền trong phương thức save ().
Phương thức update:
db.COLLECTION_NAME.update({Selection_Criteria}, {$set: {Updated Data}},{multi:
true})

Selection_Criteria, Updated Data: có dạng {key: value}


{multi: true}: dùng khi cập nhật nhiều document.
Vd:
‘sửa tên Ngô Thị Bách  Ngô Thị Bích Hòa
> db.NhanVien.update({hoten: "Ngô Thị Bách"}, {$set: {hoten: "Ngô Thị Bích
Hòa"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
‘sai vì: sửa trên 2 trường / thuộc tính, chỉ sửa 1.
> db.NhanVien.update({hoten: "Lê Thị Bảy", gt: "Nữ"}, {$get: {hoten: "Lê Văn
Bảy", gt: "Nam"}})

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

> db.NhanVien.update({tinhtp: "Long An"}, {$set: {tinhtp: "Tân An"}})


WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.NhanVien.find() ‘kiểm tra lại kết quả
‘sửa tỉnh tp Sài Gòn  Tp Hồ Chí Minh, sửa tất cả các document
> db.NhanVien.update({tinhtp: "Sài Gòn"}, {$set: {tinhtp: "Tp Hồ Chí Minh"}},
{multi: true})
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })
> db.NhanVien.find() ‘kiểm tra lại kết quả

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}})

Vd: sửa Cơ sở dữ liệu 1 thành Cơ sở dữ liệu cơ bản.


> db.MonHoc.updateOne(
... {tenmh: "Cơ sở dữ liệu 1"}, {$set: {tenmh: "Cơ sở dữ liệu cơ bản"}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.MonHoc.find() ‘kiểm tra lại kết quả
{ "_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" : "Nhập môn
CNTT", "sotc" : 3 }
{ "_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
cơ bản", "sotc" : 3 }

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}})

Vd: sửa sotc = 4 thành sotc = 3 cho tất cả các document


> db.MonHoc.updateMany( {sotc: 4}, {$set: {sotc: 3}})
{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 }
> db.MonHoc.find() ‘kiểm tra lại kết quả
{ "_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" : "Nhập môn
CNTT", "sotc" : 3 }
{ "_id" : ObjectId("60afa4cf569ef5175a5f2813"), "mamh" : "004", "tenmh" : "Tin học văn
phòng", "sotc" : 3 }
{ "_id" : ObjectId("60afa4cf569ef5175a5f2814"), "mamh" : "005", "tenmh" : "Lập trình cơ
bản", "sotc" : 3 }
{ "_id" : ObjectId("60afa4cf569ef5175a5f2815"), "mamh" : "006", "tenmh" : "Kỹ thuật lập
trình", "sotc" : 3 }
{ "_id" : ObjectId("60afa4cf569ef5175a5f2816"), "mamh" : "007", "tenmh" : "Cơ sở dữ liệu
cơ bản", "sotc" : 3 }
{ "_id" : ObjectId("60afa4cf569ef5175a5f2817"), "mamh" : "008", "tenmh" : "Cơ sở dữ liệu
2", "sotc" : 3 }

https://www.tutorialspoint.com/mongodb/mongodb_update_document.htm

4/. Delete Document:


Phương thức remove () của MongoDB được sử dụng để xóa một document khỏi collection.
db.COLLECTION_NAME.remove(Deletetion_Criteria, justOne)
16
Phương thức remove () chấp nhận hai tham số. Một là Deletetion_Criteria và thứ hai là cờ
justOne.
 Deletetion_Criteria: (Tùy chọn) xóa theo document theo Deletetion_Criteria .
 justOne: (Tùy chọn) nếu được đặt thành true hoặc 1, thì chỉ xóa một document.
Vd: xóa nhân viên có tên Lê Thị Bảy
> db.NhanVien.remove({hoten: "Lê Thị Bảy"},1)
WriteResult({ "nRemoved" : 1 })
> db.NhanVien.find() ‘kiểm tra lại kết quả

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)

Vd: hiện 3 nhân viên


> db.NhanVien.find().limit(3)
{ "_id" : ObjectId("60af1c39c58ae5adace0f8d6"), "maso" : "1050", "hoten" : "Hồ Chí
Hiếu", "ns" : "25/12/1978", "gt" : "Nam", "ml" : 999, "tinhtp" : "Bắc Giang" }
{ "_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" }

18
{ "_id" : ObjectId("60af1c39c58ae5adace0f8d9"), "maso" : "1024", "hoten" : "Nguyễn Thị
Sinh", "ns" : "24/02/1978", "gt" : "Nữ", "ml" : 950, "tinhtp" : "Bình Phước" }

Vd: hiện maso, hoten, ml của 2 nhân viên Nam


> db.NhanVien.find({gt: "Nam"}, {maso: 1, hoten: 1, ml: 1}).limit(2)
{ "_id" : ObjectId("60af1c39c58ae5adace0f8d6"), "maso" : "1050", "hoten" : "Hồ Chí
Hiếu", "ml" : 999 }
{ "_id" : ObjectId("60af1c39c58ae5adace0f8d8"), "maso" : "1023", "hoten" : "Nguyễn Văn
Chương", "ml" : 1000 }

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})

Vd: hiện các nhân viên với maso giảm dần


> db.NhanVien.find().sort({maso: -1})
{ "_id" : ObjectId("60af1c39c58ae5adace0f8d6"), "maso" : "1050", "hoten" : "Hồ Chí
Hiếu", "ns" : "25/12/1978", "gt" : "Nam", "ml" : 999, "tinhtp" : "Bắc Giang" }
{ "_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("60af1c39c58ae5adace0f8dd"), "maso" : "1028", "hoten" : "Nguyễn Văn
Minh", "ns" : "15/06/1969", "gt" : "Nam", "ml" : 1450, "tinhtp" : "Tp Hồ Chí Minh" }
{ "_id" : ObjectId("60af1c39c58ae5adace0f8dc"), "maso" : "1027", "hoten" : "Phạm Thị
Anh Thư", "ns" : "02/05/1979", "gt" : "Nữ", "ml" : 1250, "tinhtp" : "Tp Hồ Chí Minh" }
{ "_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("60af1c39c58ae5adace0f8d9"), "maso" : "1024", "hoten" : "Nguyễn Thị
Sinh", "ns" : "24/02/1978", "gt" : "Nữ", "ml" : 950, "tinhtp" : "Bình Phước" }
{ "_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" }

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
}

B/. Xóa chỉ mục:


Ta có thể xóa một chỉ mục cụ thể bằng cách sử dụng phương thức dropIndex () của
MongoDB. Cú pháp Cú pháp cơ bản của phương thức DropIndex () như sau:
db.COLLECTION_NAME.dropIndex ({Key: 1 / -1})
hoặc có thể dùng phương thức dropIndexes() để xóa tất cả các index đã tạo:
db.COLLECTION_NAME.dropIndexes()

Vd: xóa các chỉ mục đã tạo ở Vd trước


> db.NhanVien.dropIndex({hoten: 1})
{ "nIndexesWas" : 3, "ok" : 1 }
> db.NhanVien.dropIndex({maso:1, ml: -1})
{ "nIndexesWas" : 2, "ok" : 1 }

Vd: tạo các chỉ mục và xóa tất cả


> db.NhanVien.createIndex({hoten: 1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
21
}
> db.NhanVien.createIndex({maso:1, ml: -1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 2,
"numIndexesAfter" : 3,
"ok" : 1
}
> db.NhanVien.dropIndexes()
{
"nIndexesWas" : 3,
"msg" : "non-_id indexes dropped for collection",
"ok" : 1
}

C/. Xem thông tin chỉ mục:


Phương thức getIndexes () trả về mô tả của tất cả các chỉ mục trong collection.
db.COLLECTION_NAME.getIndexes()

Vd: sinh viên đọc để hiểu thông báo trả về


> db.NhanVien.createIndex({hoten: 1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
> db.NhanVien.createIndex({maso:1, ml: -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/

Date(): Returns a date either as a string or as a Date object.


Trả về một ngày tháng dưới dạng một chuỗi hoặc dưới dạng một đối tượng Ngày tháng

 Date() returns the current date as a string in the mongo shell.


 new Date() returns the current date as a Date object. The mongo shell wraps
the Date object with the ISODate helper. The ISODate is in UTC.
You can specify a particular date by passing an ISO-8601 date string with a year within the
inclusive range 0 through 9999 to the new Date() constructor or the ISODate() function.
These functions accept the following formats:
Bạn có thể chỉ định một ngày cụ thể bằng cách chuyển chuỗi ngày ISO-8601 với một năm
trong phạm vi bao gồm từ 0 đến 9999 vào hàm tạo Date () mới hoặc hàm ISODate (). Các
hàm này chấp nhận các định dạng sau:
 new Date("<YYYY-mm-dd>") returns the ISODate with the specified date.
 new Date("<YYYY-mm-ddTHH:MM:ss>") specifies the datetime in the client's
local timezone and returns the ISODate with the specified datetime in UTC.
 new Date("<YYYY-mm-ddTHH:MM:ssZ>") specifies the datetime in UTC and
returns the ISODate with the specified datetime in UTC.
 new Date(<integer>) specifies the datetime as milliseconds since the UNIX
epoch (Jan 1, 1970), and returns the resulting ISODate instance.
• new Date ("<YYYY-mm-dd>") trả về ISODate với ngày được chỉ định.
• new Date ("<YYYY-mm-ddTHH: MM: ss>") chỉ định ngày giờ trong múi giờ địa phương
của khách hàng và trả về ISODate với ngày giờ được chỉ định trong UTC.
• new Date ("<YYYY-mm-ddTHH: MM: ssZ>") chỉ định ngày giờ theo UTC và trả về
ISODate với ngày giờ được chỉ định trong UTC.
• new Date (<integer>) chỉ định ngày giờ là mili giây kể từ kỷ nguyên UNIX (ngày 1 tháng
1 năm 1970) và trả về cá thể ISODate kết quả.

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

Use Date in a Query

If no document with _id equal to 1 exists in the products collection, the following operation


inserts a document with the field dateAdded set to the current date:
Nếu không có tài liệu nào có _id bằng 1 tồn tại trong bộ sưu tập sản phẩm, thao tác sau sẽ
chèn tài liệu với field ngày đã thêm được đặt thành ngày hiện tại:
db.products.update(
{ _id: 1 },
{
$set: { item: "apple" },
$setOnInsert: { dateAdded: new Date() }
},
{ upsert: true }
)

25

You might also like