Bird
Raised Fist0
MongoDBquery~20 mins

Custom role creation in MongoDB - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
MongoDB Role Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ query_result
intermediate
2:00remaining
Output of creating a custom role with specific privileges
You create a custom role in MongoDB with the following command:

db.getSiblingDB('admin').runCommand({
  createRole: "readWriteReports",
  privileges: [
    {
      resource: { db: "reports", collection: "monthly" },
      actions: ["find", "insert"]
    }
  ],
  roles: []
})

What will be the effect of this role when assigned to a user?
AThe user can only read documents in the 'monthly' collection of the 'reports' database.
BThe user can read and insert documents only in the 'monthly' collection of the 'reports' database.
CThe user can perform any action on the 'monthly' collection in all databases.
DThe user can read and insert documents in all collections of the 'reports' database.
Attempts:
2 left
💡 Hint
Look carefully at the resource specification and the actions allowed.
📝 Syntax
intermediate
2:00remaining
Identify the syntax error in this custom role creation command
Which option contains a syntax error when creating a custom role in MongoDB?
MongoDB
db.getSiblingDB('admin').runCommand({
  createRole: "dataAnalyst",
  privileges: [
    {
      resource: { db: "analytics", collection: "" },
      actions: ["find", "update"]
    }
  ],
  roles: []
})
AThe roles array must contain at least one role; empty array is invalid.
BThe createRole field must be an object, not a string.
CThe actions array must include 'insert' to be valid.
DThe collection field is an empty string, which is invalid syntax.
Attempts:
2 left
💡 Hint
Check the resource field values carefully.
🧠 Conceptual
advanced
2:00remaining
Understanding role inheritance in custom roles
You create a custom role 'manager' that inherits from the built-in 'readWrite' role on the 'sales' database. What privileges does the 'manager' role have?
AAll privileges on all databases because 'readWrite' is a global role.
BOnly the additional privileges defined in 'manager', ignoring 'readWrite'.
CAll read and write privileges on the 'sales' database plus any additional privileges defined in 'manager'.
DNo privileges until explicitly granted to the 'manager' role.
Attempts:
2 left
💡 Hint
Think about how role inheritance works in MongoDB.
🔧 Debug
advanced
2:00remaining
Why does this custom role creation command fail?
Consider this command:

db.getSiblingDB('admin').runCommand({
  createRole: "auditor",
  privileges: [
    {
      resource: { db: "", collection: "logs" },
      actions: ["find"]
    }
  ],
  roles: []
})

Why does this command fail?
AThe database field is an empty string, which is invalid.
BThe collection name 'logs' is reserved and cannot be used.
CThe actions array must include 'insert' to be valid.
DThe roles array cannot be empty.
Attempts:
2 left
💡 Hint
Check the resource fields for correctness.
❓ optimization
expert
2:00remaining
Optimizing custom role privileges for minimal access
You want to create a custom role that allows a user to only update documents in the 'inventory' collection of the 'store' database, but no other actions or collections. Which command achieves this with the least privileges?
ACreate a role with privileges on resource {db: 'store', collection: 'inventory'} and actions ['update'].
BCreate a role with privileges on resource {db: 'store', collection: '*'} and actions ['update'].
CCreate a role with privileges on resource {db: 'store', collection: 'inventory'} and actions ['update', 'find'].
DCreate a role with privileges on resource {db: '*', collection: 'inventory'} and actions ['update'].
Attempts:
2 left
💡 Hint
Minimize both the resource scope and actions allowed.

Practice

(1/5)
1. What is the main purpose of creating a custom role in MongoDB?
easy
A. To speed up database queries
B. To assign specific permissions tailored to user needs
C. To backup the database automatically
D. To create new collections in the database

Solution

  1. Step 1: Understand role purpose

    Custom roles are designed to control what actions a user can perform.
  2. Step 2: Match purpose to options

    Only To assign specific permissions tailored to user needs describes assigning specific permissions tailored to user needs.
  3. Final Answer:

    To assign specific permissions tailored to user needs -> Option B
  4. Quick Check:

    Custom role purpose = Assign specific permissions [OK]
Hint: Custom roles control user permissions precisely [OK]
Common Mistakes:
  • Confusing roles with database backups
  • Thinking roles speed up queries
  • Assuming roles create collections
2. Which of the following is the correct syntax to create a custom role named readWriteReports with read and write privileges on the reports database?
easy
A. db.createRole({role: "readWriteReports", privileges: [{resource: {db: "reports"}, actions: ["readWrite"]}], roles: []})
B. db.createRole({role: "readWriteReports", privileges: [{resource: {db: "reports", collection: ""}, actions: ["find", "insert", "update"]}], roles: []})
C. db.createRole({name: "readWriteReports", privileges: [{resource: {db: "reports", collection: ""}, actions: ["find", "insert", "update"]}], roles: []})
D. db.createRole({name: "readWriteReports", privileges: [{resource: {db: "reports"}, actions: ["readWrite"]}], roles: []})

Solution

  1. Step 1: Check correct field names

    The field for role name is name, not role.
  2. Step 2: Verify privileges structure

    Privileges must specify resource with db and collection, and actions as an array of strings.
  3. Final Answer:

    db.createRole({name: "readWriteReports", privileges: [{resource: {db: "reports", collection: ""}, actions: ["find", "insert", "update"]}], roles: []}) -> Option C
  4. Quick Check:

    Use 'name' for role name and specify privileges correctly [OK]
Hint: Use 'name' key for role name in createRole [OK]
Common Mistakes:
  • Using 'role' instead of 'name' for role name
  • Omitting collection field in resource
  • Using 'readWrite' as action instead of specific actions
3. Given the following command, what will be the effect of the custom role limitedUser?
db.createRole({
  name: "limitedUser",
  privileges: [
    { resource: { db: "sales", collection: "orders" }, actions: ["find"] }
  ],
  roles: []
})
medium
A. User has no permissions on sales.orders collection
B. User can read and write on sales.orders collection
C. User can perform any action on sales database
D. User can only read documents from sales.orders collection

Solution

  1. Step 1: Analyze privileges actions

    The action specified is only "find", which means read access.
  2. Step 2: Understand resource scope

    The resource is the "orders" collection in the "sales" database, so permissions apply only there.
  3. Final Answer:

    User can only read documents from sales.orders collection -> Option D
  4. Quick Check:

    Action 'find' = read only on specified collection [OK]
Hint: Action 'find' means read-only permission [OK]
Common Mistakes:
  • Assuming 'find' allows write operations
  • Thinking permissions apply to whole database
  • Confusing empty roles array as full access
4. Identify the error in this custom role creation command:
db.createRole({
  name: "dataEditor",
  privileges: [
    { resource: { db: "analytics", collection: "reports" }, actions: "update" }
  ],
  roles: []
})
medium
A. The 'actions' field should be an array, not a string
B. The 'resource' field is missing the database name
C. The 'name' field should be 'role'
D. The 'roles' array cannot be empty

Solution

  1. Step 1: Check 'actions' field type

    The 'actions' field must be an array of strings, but here it is a single string "update".
  2. Step 2: Verify other fields

    The 'resource' includes both db and collection correctly; 'name' is correct; 'roles' can be empty.
  3. Final Answer:

    The 'actions' field should be an array, not a string -> Option A
  4. Quick Check:

    'actions' must be an array [OK]
Hint: Always use array for 'actions' even if one action [OK]
Common Mistakes:
  • Using string instead of array for 'actions'
  • Confusing 'name' with 'role' field
  • Thinking 'roles' array cannot be empty
5. You want to create a custom role reportManager that allows users to read all collections in the reports database and also run the aggregate action on the summary collection only. Which of the following commands correctly implements this?
hard
A. db.createRole({name: "reportManager", privileges: [{resource: {db: "reports", collection: ""}, actions: ["find"]}, {resource: {db: "reports", collection: "summary"}, actions: ["aggregate"]}], roles: []})
B. db.createRole({name: "reportManager", privileges: [{resource: {db: "reports"}, actions: ["find"]}, {resource: {db: "reports", collection: "summary"}, actions: ["aggregate"]}], roles: []})
C. db.createRole({name: "reportManager", privileges: [{resource: {db: "reports", collection: "summary"}, actions: ["find", "aggregate"]}], roles: []})
D. db.createRole({name: "reportManager", privileges: [{resource: {db: "reports", collection: ""}, actions: ["find", "aggregate"]}], roles: []})

Solution

  1. Step 1: Understand the requirements

    Users must have read (find) access on all collections in 'reports' and aggregate only on 'summary' collection.
  2. Step 2: Check privileges for all collections

    Using collection: "" means all collections in the database, so first privilege grants find on all collections.
  3. Step 3: Check aggregate privilege on summary

    Second privilege grants aggregate only on 'summary' collection.
  4. Final Answer:

    db.createRole({name: "reportManager", privileges: [{resource: {db: "reports", collection: ""}, actions: ["find"]}, {resource: {db: "reports", collection: "summary"}, actions: ["aggregate"]}], roles: []}) -> Option A
  5. Quick Check:

    Separate privileges for all collections and specific collection actions [OK]
Hint: Use empty string for all collections, specify collection for specific actions [OK]
Common Mistakes:
  • Using db only without collection for find
  • Combining find and aggregate on all collections
  • Missing separate privilege for aggregate on summary
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard