Problem Statement/Rationale
In Compass, when you click on the eillipsis next to a View, click "Duplicate View", enter some view name, and click the "Duplicate" button, then it throws an error. The error that it throws depends on the role and privileges the user has, but the *root-cause of the error is same*. Specifically, the "Duplicate View" functionality erroneously tries to duplicate the view in a database whose name is the view's source collection's name.
For example, consider this test collection called survey:
PRIMARY> db.survey.find() { "_id" : 1, "empNumber" : "abc123", "feedback" : { "management" : 3, "environment" : 3 }, "department" : "A" }
I created a view named managementFeedback on the above collection:
PRIMARY> db.createView( ... "managementFeedback", ... "survey", ... [ { $project: { "management": "$feedback.management", department: 1 } } ] ... ) { "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1629140171, 1), "signature" : { "hash" : BinData(0,"bHBmefZ5gCFjO5/HT+tLSkRxA2Q="), "keyId" : NumberLong("6940972140258656257") } }, "operationTime" : Timestamp(1629140171, 1) } MongoDB Enterprise HDFTS-shard-0:PRIMARY> db.managementFeedback.find() { "_id" : 1, "department" : "A", "management" : 3 }
As you can observe above, survey is the name of the collection.
Now, from Compass versions 1.25.0 as well as 1.28.1, if I try to duplicate the collection, I get errors. The error that I get if I login to Compass as user with admin level privileges, is as follows:
Invalid input namespace, survey.
And the error that I get if I login to Compass as user with non-admin level privileges, is as follows:
not authorized on survey to execute command { create: "xyz", viewOn: "", pipeline: [ { $project: { management: "$feedback.management", department: 1 } } ], lsid: { id: UUID("1af90bb8-52be-41f4-afb7-7361347ed059") }, $clusterTime: { clusterTime: Timestamp(1629153553, 1), signature: { hash: BinData(0, AA0B7505B09DD8AF43F8347FF1ABA5F704900771), keyId: 6940972140258656257 } }, $db: "survey" }
Note above in both errors that the dbname shows as survey. In other words, Compass erroneously tries to duplicate the view in a database whose name is the view's source collection's name.
Steps to Reproduce
- Create a view on a collection.
- From Compass > click on the ellipsis next to the View name > click "Duplicate View" > enter some view name > click the "Duplicate" button.
Expected Results
Compass should not choose the view's source collection's name as the DB name for creating the duplicated view, and the View should be duplicated correctly and successfully.
Actual Results
The view creation fails with the above errors.
Additional Notes
Observed in Compass versions 1.25.0 as well as 1.28.1.