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
- 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ốidb.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" } ]
6db.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" } ]
2Bâ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" } ]
8Lầ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ìnhTạ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ườngVí 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