MongoDB là gì?
MongoDB là một hệ quản trị cơ sở dữ liệu phi quan hệ (NoSQL) mã nguồn mở, được thiết kế để lưu trữ và truy xuất dữ liệu trong các tài liệu JSON có độ linh hoạt cao.
Cấu trúc Dữ liệu:
BSON (Binary JSON): MongoDB sử dụng định dạng BSON để lưu trữ dữ liệu. BSON tương tự như JSON nhưng hỗ trợ các kiểu dữ liệu như số nguyên, số thực, chuỗi, mảng, đối tượng, ngày giờ, và các kiểu dữ liệu khác.
Cài đặt:
MacOS
brew tap mongodb/brew
brew install mongodb-community
brew services start mongodb-community
Install MongoDB Shell
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew tap mongodb/brew
brew install mongodb-community-shell
Các câu lệnh
Tạo phiên làm việc MongoDB Shell
$ mongo
Hiển thị danh sách các database
> show dbs
admin 0.000GB
ai_analyze_idea 0.000GB
config 0.000GB
local 0.000GB
Chọn database
use <db name>
# Ex:
> use ai_analyze_idea
switched to db ai_analyze_idea
Tạo một collection trong database
db.createCollection("collection name")
# Ex:
> db.createCollection("tests")
{ "ok" : 1 }
Thêm dữ liệu vào collection
db.<collection_name>.insert({<field1>: value1, <field2>: value2, ...})
db.<collection_name>.insert([{<field1>: value1, <field2>: value2, ...}])
# Ex:
> db.tests.insert({name: "Ninh Lee", age: 24, city: "Da Nang"})
WriteResult({ "nInserted" : 1 })
> db.tests.insert([{name: "Ninh Lee 1", age: 24, city: "Da Nang 1"}, {name: "Ninh Lee 2", age: 24, city: "Da Nang 2"}])
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
Select all documents
db.<collection_name>.find()
# Ex:
> db.tests.find()
{ "_id" : ObjectId("65660837f88bc6a455d60d6d"), "name" : "Ninh Lee", "age" : 24, "city" : "Da Nang" }
{ "_id" : ObjectId("65660864f88bc6a455d60d6e"), "name" : "Ninh Lee 1", "age" : 24, "city" : "Da Nang 1" }
{ "_id" : ObjectId("65660864f88bc6a455d60d6f"), "name" : "Ninh Lee 2", "age" : 24, "city" : "Da Nang 2" }
> db.test.find().sort({name: -1})
{ "_id" : ObjectId("65660ccff88bc6a455d60d72"), "name" : "Ninh Lee 5", "age" : 26, "city" : "Da Nang 1" }
{ "_id" : ObjectId("65660ccff88bc6a455d60d73"), "name" : "Ninh Lee 4", "age" : 30, "city" : "Da Nang 2" }
{ "_id" : ObjectId("65660c9ef88bc6a455d60d71"), "name" : "Ninh Lee 3", "age" : 25, "city" : "Da Nang 2" }
{ "_id" : ObjectId("65660c9ef88bc6a455d60d70"), "name" : "Ninh Lee 2", "age" : 26, "city" : "Da Nang 1" }
{ "_id" : ObjectId("65660864f88bc6a455d60d6e"), "name" : "Ninh Lee 1", "age" : 24, "city" : "Da Nang 1" }
{ "_id" : ObjectId("65660837f88bc6a455d60d6d"), "name" : "Ninh Lee", "age" : 25, "city" : "Da Nang" }
Cập nhật document
db.<collection_name>.update({<query>}, {<update>})
# Ex:
> db.tests.update({name: "Ninh Lee"}, {$set: {age: 25}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.tests.find()
{ "_id" : ObjectId("65660837f88bc6a455d60d6d"), "name" : "Ninh Lee", "age" : 25, "city" : "Da Nang" }
{ "_id" : ObjectId("65660864f88bc6a455d60d6e"), "name" : "Ninh Lee 1", "age" : 24, "city" : "Da Nang 1" }
{ "_id" : ObjectId("65660864f88bc6a455d60d6f"), "name" : "Ninh Lee 2", "age" : 24, "city" : "Da Nang 2" }
Delete document
db.<collection_name>.remove({<query>})
# Ex:
> db.tests.remove({name: 'Ninh Lee 2'})
WriteResult({ "nRemoved" : 1 })
> db.tests.find()
{ "_id" : ObjectId("65660837f88bc6a455d60d6d"), "name" : "Ninh Lee", "age" : 25, "city" : "Da Nang" }
{ "_id" : ObjectId("65660864f88bc6a455d60d6e"), "name" : "Ninh Lee 1", "age" : 24, "city" : "Da Nang 1" }
Index
# 1 sắp xếp tăng dần
# -1 sắp xếp giảm dần
db.<collection_name>.createIndex({ <field>: 1 })
db.<collection_name>.createIndex({ <field1>: 1, <field2>: -1 })
# Ex:
> db.tests.createIndex({name: 1, age: -1})
{
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"createdCollectionAutomatically" : false,
"ok" : 1
}
db.<collection_name>.getIndexes()
# Ex:
> db.tests.getIndexes()
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
},
{
"v" : 2,
"key" : {
"name" : 1,
"age" : -1
},
"name" : "name_1_age_-1"
}
]
db.<collection_name>.dropIndex("<index_name>")
# Ex:
> db.tests.dropIndex("name_1_age_-1")
{ "nIndexesWas" : 2, "ok" : 1 }
> db.tests.getIndexes()
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
Explain query
db.<collection_name>.explain().find({<query>})
# Ex:
> db.tests.explain().find({ age: 25 }).sort({ name: 1 })
{
"explainVersion" : "1",
"queryPlanner" : {
"namespace" : "ai_analyze_idea.tests",
"indexFilterSet" : false,
"parsedQuery" : {
"age" : {
"$eq" : 25
}
},
"queryHash" : "397F81F6",
"planCacheKey" : "EF61D479",
"maxIndexedOrSolutionsReached" : false,
"maxIndexedAndSolutionsReached" : false,
"maxScansToExplodeReached" : false,
"winningPlan" : {
"stage" : "FETCH",
"filter" : {
"age" : {
"$eq" : 25
}
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"name" : 1,
"age" : -1
},
"indexName" : "name_1_age_-1",
"isMultiKey" : false,
"multiKeyPaths" : {
"name" : [ ],
"age" : [ ]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"name" : [
"[MinKey, MaxKey]"
],
"age" : [
"[MaxKey, MinKey]"
]
}
}
},
"rejectedPlans" : [ ]
},
"command" : {
"find" : "tests",
"filter" : {
"age" : 25
},
"sort" : {
"name" : 1
},
"$db" : "ai_analyze_idea"
},
"serverInfo" : {
"host" : "192.168.0.108",
"port" : 27017,
"version" : "6.0.5",
"gitVersion" : "c9a99c120371d4d4c52cbb15dac34a36ce8d3b1d"
},
"serverParameters" : {
"internalQueryFacetBufferSizeBytes" : 104857600,
"internalQueryFacetMaxOutputDocSizeBytes" : 104857600,
"internalLookupStageIntermediateDocumentMaxSizeBytes" : 104857600,
"internalDocumentSourceGroupMaxMemoryBytes" : 104857600,
"internalQueryMaxBlockingSortMemoryUsageBytes" : 104857600,
"internalQueryProhibitBlockingMergeOnMongoS" : 0,
"internalQueryMaxAddToSetBytes" : 104857600,
"internalDocumentSourceSetWindowFieldsMaxMemoryBytes" : 104857600
},
"ok" : 1
}
Kết luận
Trên đây là một cái nhìn tổng quan về MongoDB, một hệ quản trị cơ sở dữ liệu NoSQL mạnh mẽ và linh hoạt. Tích hợp BSON, khả năng mở rộng và index hiệu quả là những điểm mạnh giúp MongoDB trở thành lựa chọn hàng đầu cho nhiều ứng dụng hiện đại.
Trong phần tiếp theo, chúng ta sẽ đi sâu vào các khía cạnh quan trọng khác của MongoDB, bao gồm Aggregation Framework, quản lý bảo mật, và tối ưu hóa hiệu suất,…