MongoDB - Tài liệu truy vấn

Trong chương này, chúng ta sẽ học cách truy vấn tài liệu từ bộ sưu tập MongoDB.

Phương thức find ()

Để truy vấn dữ liệu từ bộ sưu tập MongoDB, bạn cần sử dụng MongoDB's find() phương pháp.

Cú pháp

Cú pháp cơ bản của find() phương pháp như sau:

>db.COLLECTION_NAME.find()

find() phương thức sẽ hiển thị tất cả các tài liệu theo cách không có cấu trúc.

Thí dụ

Giả sử chúng tôi đã tạo một bộ sưu tập có tên mycol là -

> use sampleDB
switched to db sampleDB
> db.createCollection("mycol")
{ "ok" : 1 }
>

Và đã chèn 3 tài liệu vào đó bằng phương thức insert () như hình dưới đây -

> db.mycol.insert([
	{
		title: "MongoDB Overview",
		description: "MongoDB is no SQL database",
		by: "tutorials point",
		url: "http://www.tutorialspoint.com",
		tags: ["mongodb", "database", "NoSQL"],
		likes: 100
	},
	{
		title: "NoSQL Database",
		description: "NoSQL database doesn't have tables",
		by: "tutorials point",
		url: "http://www.tutorialspoint.com",
		tags: ["mongodb", "database", "NoSQL"],
		likes: 20,
		comments: [
			{
				user:"user1",
				message: "My first comment",
				dateCreated: new Date(2013,11,10,2,35),
				like: 0
			}
		]
	}
])

Phương thức sau lấy tất cả các tài liệu trong bộ sưu tập -

> db.mycol.find()
{ "_id" : ObjectId("5dd4e2cc0821d3b44607534c"), "title" : "MongoDB Overview", "description" : "MongoDB is no SQL database", "by" : "tutorials point", "url" : "http://www.tutorialspoint.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
{ "_id" : ObjectId("5dd4e2cc0821d3b44607534d"), "title" : "NoSQL Database", "description" : "NoSQL database doesn't have tables", "by" : "tutorials point", "url" : "http://www.tutorialspoint.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 20, "comments" : [ { "user" : "user1", "message" : "My first comment", "dateCreated" : ISODate("2013-12-09T21:05:00Z"), "like" : 0 } ] }
>

Phương thức khá ()

Để hiển thị kết quả theo định dạng, bạn có thể sử dụng phương thức khá ().

Cú pháp

>db.COLLECTION_NAME.find().pretty()

Thí dụ

Ví dụ sau lấy tất cả các tài liệu từ bộ sưu tập có tên mycol và sắp xếp chúng ở định dạng dễ đọc.

> db.mycol.find().pretty()
{
	"_id" : ObjectId("5dd4e2cc0821d3b44607534c"),
	"title" : "MongoDB Overview",
	"description" : "MongoDB is no SQL database",
	"by" : "tutorials point",
	"url" : "http://www.tutorialspoint.com",
	"tags" : [
		"mongodb",
		"database",
		"NoSQL"
	],
	"likes" : 100
}
{
	"_id" : ObjectId("5dd4e2cc0821d3b44607534d"),
	"title" : "NoSQL Database",
	"description" : "NoSQL database doesn't have tables",
	"by" : "tutorials point",
	"url" : "http://www.tutorialspoint.com",
	"tags" : [
		"mongodb",
		"database",
		"NoSQL"
	],
	"likes" : 20,
	"comments" : [
		{
			"user" : "user1",
			"message" : "My first comment",
			"dateCreated" : ISODate("2013-12-09T21:05:00Z"),
			"like" : 0
		}
	]
}

Phương thức findOne ()

Ngoài phương thức find (), có findOne() phương thức này chỉ trả về một tài liệu.

Cú pháp

>db.COLLECTIONNAME.findOne()

Thí dụ

Ví dụ sau lấy tài liệu với tiêu đề MongoDB Tổng quan.

> db.mycol.findOne({title: "MongoDB Overview"})
{
	"_id" : ObjectId("5dd6542170fb13eec3963bf0"),
	"title" : "MongoDB Overview",
	"description" : "MongoDB is no SQL database",
	"by" : "tutorials point",
	"url" : "http://www.tutorialspoint.com",
	"tags" : [
		"mongodb",
		"database",
		"NoSQL"
	],
	"likes" : 100
}

RDBMS Nơi Tương đương Điều khoản trong MongoDB

Để truy vấn tài liệu trên cơ sở một số điều kiện, bạn có thể sử dụng các thao tác sau.

Hoạt động Cú pháp Thí dụ RDBMS tương đương
Bình đẳng {<khóa>: {$ ví dụ; <giá trị>}} db.mycol.find ({"theo": "điểm hướng dẫn"}). khá () where by = 'tutorial point'
Ít hơn {<khóa>: {$ lt: <value>}} db.mycol.find ({"thích": {$ lt: 50}}). khá () nơi thích <50
Nhỏ hơn bằng {<khóa>: {$ lte: <value>}} db.mycol.find ({"thích": {$ lte: 50}}). khá () nơi thích <= 50
Lớn hơn {<khóa>: {$ gt: <value>}} db.mycol.find ({"thích": {$ gt: 50}}). khá () nơi thích> 50
Lớn hơn bằng {<khóa>: {$ gte: <value>}} db.mycol.find ({"thích": {$ gte: 50}}). khá () nơi thích> = 50
Không bằng {<khóa>: {$ ne: <value>}} db.mycol.find ({"thích": {$ ne: 50}}). khá () nơi thích! = 50
Giá trị trong một mảng {<khóa>: {$ in: [<value1>, <value2>, …… <valueN>]}} db.mycol.find ({"name": {$ in: ["Raj", "Ram", "Raghu"]}}). khá () Trường hợp tên khớp với bất kỳ giá trị nào trong: ["Raj", "Ram", "Raghu"]
Các giá trị không có trong một mảng {<khóa>: {$ nin: <value>}} db.mycol.find ({"name": {$ nin: ["Ramu", "Raghav"]}}). khá () Trường hợp giá trị tên không có trong mảng: ["Ramu", "Raghav"] hoặc, hoàn toàn không tồn tại

VÀ trong MongoDB

Cú pháp

Để truy vấn tài liệu dựa trên điều kiện AND, bạn cần sử dụng $ và từ khóa. Sau đây là cú pháp cơ bản của AND -

>db.mycol.find({ $and: [ {<key1>:<value1>}, { <key2>:<value2>} ] })

Thí dụ

Ví dụ sau sẽ hiển thị tất cả các hướng dẫn được viết bởi 'điểm hướng dẫn' và có tiêu đề là 'Tổng quan về MongoDB'.

> db.mycol.find({$and:[{"by":"tutorials point"},{"title": "MongoDB Overview"}]}).pretty()
{
	"_id" : ObjectId("5dd4e2cc0821d3b44607534c"),
	"title" : "MongoDB Overview",
	"description" : "MongoDB is no SQL database",
	"by" : "tutorials point",
	"url" : "http://www.tutorialspoint.com",
	"tags" : [
		"mongodb",
		"database",
		"NoSQL"
	],
	"likes" : 100
}
>

Đối với ví dụ đã cho ở trên, mệnh đề where tương đương sẽ là ' where by = 'tutorials point' AND title = 'MongoDB Overview' '. Bạn có thể chuyển bất kỳ số lượng cặp khóa, cặp giá trị nào trong mệnh đề tìm.

HOẶC trong MongoDB

Cú pháp

Để truy vấn tài liệu dựa trên điều kiện HOẶC, bạn cần sử dụng $ortừ khóa. Sau đây là cú pháp cơ bản củaOR -

>db.mycol.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()

Thí dụ

Ví dụ sau sẽ hiển thị tất cả các hướng dẫn được viết bởi 'hướng dẫn điểm' hoặc có tiêu đề là 'Tổng quan về MongoDB'.

>db.mycol.find({$or:[{"by":"tutorials point"},{"title": "MongoDB Overview"}]}).pretty()
{
   "_id": ObjectId(7df78ad8902c),
   "title": "MongoDB Overview", 
   "description": "MongoDB is no sql database",
   "by": "tutorials point",
   "url": "http://www.tutorialspoint.com",
   "tags": ["mongodb", "database", "NoSQL"],
   "likes": "100"
}
>

Sử dụng AND và OR cùng nhau

Thí dụ

Ví dụ sau sẽ hiển thị các tài liệu có lượt thích lớn hơn 10 và có tiêu đề là 'Tổng quan về MongoDB' hoặc bằng 'điểm hướng dẫn'. SQL tương đương trong đó mệnh đề là'where likes>10 AND (by = 'tutorials point' OR title = 'MongoDB Overview')'

>db.mycol.find({"likes": {$gt:10}, $or: [{"by": "tutorials point"},
   {"title": "MongoDB Overview"}]}).pretty()
{
   "_id": ObjectId(7df78ad8902c),
   "title": "MongoDB Overview", 
   "description": "MongoDB is no sql database",
   "by": "tutorials point",
   "url": "http://www.tutorialspoint.com",
   "tags": ["mongodb", "database", "NoSQL"],
   "likes": "100"
}
>

NOR trong MongoDB

Cú pháp

Để truy vấn tài liệu dựa trên điều kiện KHÔNG, bạn cần sử dụng từ khóa $ not. Sau đây là cú pháp cơ bản củaNOT -

>db.COLLECTION_NAME.find(
	{
		$not: [
			{key1: value1}, {key2:value2}
		]
	}
)

Thí dụ

Giả sử chúng tôi đã chèn 3 tài liệu vào bộ sưu tập empDetails như hình dưới đây -

db.empDetails.insertMany(
	[
		{
			First_Name: "Radhika",
			Last_Name: "Sharma",
			Age: "26",
			e_mail: "[email protected]",
			phone: "9000012345"
		},
		{
			First_Name: "Rachel",
			Last_Name: "Christopher",
			Age: "27",
			e_mail: "[email protected]",
			phone: "9000054321"
		},
		{
			First_Name: "Fathima",
			Last_Name: "Sheik",
			Age: "24",
			e_mail: "[email protected]",
			phone: "9000054321"
		}
	]
)

Ví dụ sau sẽ truy xuất (các) tài liệu có tên không phải là "Radhika" và họ không phải là "Christopher"

> db.empDetails.find(
	{
		$nor:[
			40
			{"First_Name": "Radhika"},
			{"Last_Name": "Christopher"}
		]
	}
).pretty()
{
	"_id" : ObjectId("5dd631f270fb13eec3963bef"),
	"First_Name" : "Fathima",
	"Last_Name" : "Sheik",
	"Age" : "24",
	"e_mail" : "[email protected]",
	"phone" : "9000054321"
}

KHÔNG trong MongoDB

Cú pháp

Để truy vấn tài liệu dựa trên điều kiện KHÔNG, bạn cần sử dụng từ khóa $ not, sau đây là cú pháp cơ bản của NOT -

>db.COLLECTION_NAME.find(
	{
		$NOT: [
			{key1: value1}, {key2:value2}
		]
	}
).pretty()

Thí dụ

Ví dụ sau sẽ truy xuất (các) tài liệu có tuổi không lớn hơn 25

> db.empDetails.find( { "Age": { $not: { $gt: "25" } } } )
{
	"_id" : ObjectId("5dd6636870fb13eec3963bf7"),
	"First_Name" : "Fathima",
	"Last_Name" : "Sheik",
	"Age" : "24",
	"e_mail" : "[email protected]",
	"phone" : "9000054321"
}