Giới thiệu MongoDB (P1)

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

Zsh
brew tap mongodb/brew
brew install mongodb-community
brew services start mongodb-community

Install MongoDB Shell

Zsh
/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

Zsh
$ mongo

Hiển thị danh sách các database

Zsh
> show dbs
admin                      0.000GB
ai_analyze_idea            0.000GB
config                     0.000GB
local                      0.000GB

Chọn database

Zsh
use <db name>

# Ex:
> use ai_analyze_idea
switched to db ai_analyze_idea

Tạo một collection trong database

Zsh
db.createCollection("collection name")

# Ex:
> db.createCollection("tests")
{ "ok" : 1 }

Thêm dữ liệu vào collection

Zsh
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

Zsh
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

Zsh
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

Zsh
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

Zsh
# 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
}
Zsh
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"
	}
]
Zsh
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

Zsh
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,…

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like