Cách sử dụng tìm kiếm ký tự đại diện trong mongodb

Hiển thị vai trò bằng cách sử dụng ký tự đại diện

Trên hệ thống z/TPF , bạn có thể tìm kiếm vai trò bằng ký tự đại diện (*). Chỉ định ký tự đại diện ở cuối tên vai trò. Bất kỳ ký tự nào được chỉ định sau ký tự đại diện đều bị bỏ qua.

Để sử dụng hỗ trợ ký tự đại diện từ trình bao MongoDB từ xa, bạn phải mã hóa rolesInfo command.

Ví dụ sau sử dụng hỗ trợ ký tự đại diện để hiển thị tất cả các vai trò bắt đầu bằng chữ P trong cơ sở dữ liệu z/bảo mật người dùng TPF của .

db.runCommand({rolesInfo: "P*" })
{
        "roles" : [
                {
                        "role" : "PNRWrite",
                        "db" : "tpfdf",
                        "isBuiltin" : false,
                        "roles" : [ ],
                        "inheritedRoles" : [ ]
                },
                {
                        "role" : "PNRRead",
                        "db" : "tpfdf",
                        "isBuiltin" : false,
                        "roles" : [ ],
                        "inheritedRoles" : [ ]
                }
        ],
        "ok" : 1
}
MongoDB shell:
db.runCommand({rolesInfo: "P*" })
{
        "roles" : [
                {
                        "role" : "PNRWrite",
                        "db" : "tpfdf",
                        "isBuiltin" : false,
                        "roles" : [ ],
                        "inheritedRoles" : [ ]
                },
                {
                        "role" : "PNRRead",
                        "db" : "tpfdf",
                        "isBuiltin" : false,
                        "roles" : [ ],
                        "inheritedRoles" : [ ]
                }
        ],
        "ok" : 1
}

chủ đề phụ huynh. Hiển thị vai trò trong cơ sở dữ liệu bảo mật người dùng z/TPF

tham khảo liên quan

  • Các lệnh quản lý vai trò và người dùng được hỗ trợ bởi z/TPF hỗ trợ cho MongoDB

Thông tin liên quan

  • Cách sử dụng tìm kiếm ký tự đại diện trong mongodb
    MongoDB

Có một số cách để tạo chỉ mục trong MongoDB và từ MongoDB 4. 2, chúng ta có thể tạo các chỉ mục ký tự đại diện

Chỉ mục ký tự đại diện có thể được coi là một loại bộ lọc tự động khớp với bất kỳ trường, tài liệu phụ hoặc mảng nào trong một bộ sưu tập, sau đó lập chỉ mục các kết quả trùng khớp đó

Điều này có thể hữu ích nếu tài liệu của bạn chứa dữ liệu phi cấu trúc với các trường khác nhau trong các hệ thống phân cấp khác nhau. Trong những trường hợp như vậy, không có cách nào để dự đoán chỉ mục sẽ là gì, bởi vì bạn không biết dữ liệu nào sẽ có trong mỗi tài liệu

Các chỉ mục ký tự đại diện có thể hữu ích với dữ liệu phi cấu trúc như vậy, bởi vì chúng lập chỉ mục tất cả các giá trị vô hướng của trường, tự động lặp lại vào bất kỳ tài liệu con hoặc mảng nào và lập chỉ mục tất cả các trường vô hướng trong tài liệu con/mảng

Bộ sưu tập ví dụ

Chỉ mục ký tự đại diện không dành cho mọi bộ sưu tập. Bạn sẽ chỉ tạo một chỉ mục ký tự đại diện trên một số bộ sưu tập nhất định với các tài liệu chứa dữ liệu phi cấu trúc với các trường khác nhau trong các hệ thống phân cấp khác nhau

Dưới đây là một ví dụ về bộ sưu tập có tên là

db.pets.find( { "details.awards.New York Marathon" : "Fastest Dog" } )
1 có thể là ứng cử viên sáng giá cho chỉ mục ký tự đại diện

{
	"_id" : 1,
	"name" : "Wag",
	"details" : {
		"type" : "Dog",
		"weight" : 20,
		"awards" : {
			"Florida Dog Awards" : "Top Dog",
			"New York Marathon" : "Fastest Dog",
			"Sumo 2020" : "Biggest Dog"
		}
	}
}
{
	"_id" : 2,
	"name" : "Fetch",
	"details" : {
		"born" : ISODate("2020-06-22T14:00:00Z"),
		"color" : "Black"
	}
}
{
	"_id" : 3,
	"name" : "Scratch",
	"details" : {
		"eats" : [
			"Mouse Porridge",
			"Bird Soup",
			"Caviar"
		],
		"type" : "Cat",
		"born" : ISODate("2020-12-19T14:00:00Z")
	}
}

Mỗi tài liệu trong số 3 tài liệu trong bộ sưu tập này có trường

db.pets.find( { "details.awards.New York Marathon" : "Fastest Dog" } )
2, nhưng chúng chứa các trường khác nhau trong trường đó. Nó không nhất quán. Điều này thường gây khó khăn cho việc tạo chỉ mục vì chúng tôi không biết trường nào sẽ có trong mỗi tài liệu. Chúng tôi có thể cần tạo nhiều chỉ mục, sau khi phân tích cẩn thận các cấu trúc tài liệu có thể

May mắn thay, chúng ta có thể tạo một chỉ mục ký tự đại diện

Nhưng trước tiên, hãy xem kế hoạch truy vấn có thể trông như thế nào khi truy vấn một trong các trường đó. Hãy tưởng tượng chúng ta muốn tìm xem con chó nào đã nhận được giải thưởng “Con chó nhanh nhất” tại cuộc thi Marathon New York. Chúng ta có thể làm như sau

db.pets.find( { "details.awards.New York Marathon" : "Fastest Dog" } )

Và nếu chúng tôi muốn kiểm tra kế hoạch truy vấn, chúng tôi có thể thêm

db.pets.find( { "details.awards.New York Marathon" : "Fastest Dog" } )
3 vào cuối

db.pets.find( { "details.awards.New York Marathon" : "Fastest Dog" } ).explain()

Cái nào trả về sau

{
	"queryPlanner" : {
		"plannerVersion" : 1,
		"namespace" : "PetHotel.pets",
		"indexFilterSet" : false,
		"parsedQuery" : {
			"details.awards.New York Marathon" : {
				"$eq" : "Fastest Dog"
			}
		},
		"queryHash" : "EC0D5185",
		"planCacheKey" : "EC0D5185",
		"winningPlan" : {
			"stage" : "COLLSCAN",
			"filter" : {
				"details.awards.New York Marathon" : {
					"$eq" : "Fastest Dog"
				}
			},
			"direction" : "forward"
		},
		"rejectedPlans" : [ ]
	},
	"ok" : 1
}

Điều này cho chúng tôi biết rằng nó sẽ thực hiện quét bộ sưu tập (COLLSCAN), có nghĩa là nó phải quét qua mọi tài liệu để tìm trường

Tạo chỉ mục ký tự đại diện

Dưới đây là ví dụ về cách tạo chỉ mục ký tự đại diện cho bộ sưu tập trên

________số 8

đầu ra

{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1
}

Đó là nó. Chỉ mục ký tự đại diện đã được tạo

Để tạo chỉ mục ký tự đại diện, chúng tôi đã sử dụng tên trường mà chúng tôi muốn tạo chỉ mục trên đó (trong trường hợp này là trường

db.pets.find( { "details.awards.New York Marathon" : "Fastest Dog" } )
2), sau đó chúng tôi nối tên trường đó bằng một dấu chấm (
db.pets.find( { "details.awards.New York Marathon" : "Fastest Dog" } )
5), và sau đó là phần quan trọng, phần
db.pets.find( { "details.awards.New York Marathon" : "Fastest Dog" } )
6

db.pets.find( { "details.awards.New York Marathon" : "Fastest Dog" } )
6 chỉ định rằng một chỉ mục ký tự đại diện phải được tạo từ trường này và tất cả các tài liệu phụ của nó

Tiền tố của

db.pets.find( { "details.awards.New York Marathon" : "Fastest Dog" } )
6 với
db.pets.find( { "details.awards.New York Marathon" : "Fastest Dog" } )
2 giới hạn phạm vi của chỉ mục ký tự đại diện chỉ trong trường
db.pets.find( { "details.awards.New York Marathon" : "Fastest Dog" } )
2

Bây giờ, hãy kiểm tra lại kế hoạch truy vấn cho truy vấn đã nói ở trên

db.pets.find( { "details.awards.New York Marathon" : "Fastest Dog" } ).explain()

Kết quả

db.pets.find( { "details.awards.New York Marathon" : "Fastest Dog" } )
8

Lần này quét bộ sưu tập (COLLSCAN) đã được thay thế bằng quét chỉ mục (IXSCAN) trên chỉ mục ký tự đại diện mới được tạo của chúng tôi

Mỗi trường trong trường

db.pets.find( { "details.awards.New York Marathon" : "Fastest Dog" } )
2 của chúng tôi đã được lập chỉ mục dưới dạng đường dẫn/giá trị và có một mục nhập trong chỉ mục cho mọi trường trong cấu trúc phân cấp. Trường hợp giá trị trường là một tài liệu con (chẳng hạn như của chúng tôi.
db.pets.find( { "details.awards.New York Marathon" : "Fastest Dog" } ).explain()
2), việc lập chỉ mục đã đi xuống tài liệu con và lặp lại quy trình

Tạo chỉ mục ký tự đại diện trên tất cả các đường dẫn trường

Trong ví dụ trước, chúng tôi đã tạo một chỉ mục ký tự đại diện trên một đường dẫn trường duy nhất. Có thể tạo chỉ mục ký tự đại diện trên tất cả các đường dẫn trường chỉ bằng cách sử dụng

db.pets.find( { "details.awards.New York Marathon" : "Fastest Dog" } )
6 mà không cần thêm tiền tố vào trường

Ví dụ, chúng ta có thể đã làm điều này

{
	"_id" : 1,
	"name" : "Wag",
	"details" : {
		"type" : "Dog",
		"weight" : 20,
		"awards" : {
			"Florida Dog Awards" : "Top Dog",
			"New York Marathon" : "Fastest Dog",
			"Sumo 2020" : "Biggest Dog"
		}
	}
}
{
	"_id" : 2,
	"name" : "Fetch",
	"details" : {
		"born" : ISODate("2020-06-22T14:00:00Z"),
		"color" : "Black"
	}
}
{
	"_id" : 3,
	"name" : "Scratch",
	"details" : {
		"eats" : [
			"Mouse Porridge",
			"Bird Soup",
			"Caviar"
		],
		"type" : "Cat",
		"born" : ISODate("2020-12-19T14:00:00Z")
	}
}
2

Điều đó sẽ tạo ra một chỉ mục ký tự đại diện trên tất cả các đường dẫn trường

Trên thực tế, điều đó không hoàn toàn đúng. Theo mặc định, các chỉ mục ký tự đại diện không được tạo trên trường

db.pets.find( { "details.awards.New York Marathon" : "Fastest Dog" } ).explain()
4. Để bao gồm trường
db.pets.find( { "details.awards.New York Marathon" : "Fastest Dog" } ).explain()
4, bạn cần đưa nó vào tài liệu
db.pets.find( { "details.awards.New York Marathon" : "Fastest Dog" } ).explain()
6

Làm cách nào để tìm kiếm trong MongoDB bằng ký tự đại diện?

Tạo Chỉ mục ký tự đại diện trên tất cả các trường . Nếu một trường nhất định là một tài liệu hoặc mảng lồng nhau, chỉ mục ký tự đại diện sẽ lặp lại vào tài liệu/mảng và lưu trữ giá trị cho tất cả các trường trong tài liệu/mảng.

Làm cách nào để tìm kiếm trong MongoDB bằng regex?

Trong MongoDB, các .
i. Để khớp cả mẫu chữ thường và chữ hoa trong chuỗi
m. Để bao gồm ^ và $ trong mẫu trong trận đấu tôi. e. để tìm kiếm cụ thể ^ và $ bên trong chuỗi. .
x. Để bỏ qua tất cả các ký tự khoảng trắng trong mẫu $regex

Ví dụ về tìm kiếm ký tự đại diện là gì?

Ký tự đại diện. Tìm kiếm nhiều ký tự . Truy vấn wom? n tìm các từ woman, women, womyn, v.v. Truy vấn bird* tìm chim, chim hót, người chim, chim và các từ khác bắt đầu bằng chim.

Làm cách nào để tìm kiếm các ký tự đặc biệt trong MongoDB?

Để khớp một ký tự đặc biệt, đặt dấu gạch chéo ngược lên trước ký tự đó , như thế này \*.