Not authorized to execute command find in local mongo database

Hi all,

I have an application scenario where 3 meteor applications are using a mongo database replication set. A machine is allocated to run each meteor application. A single mongo database is running on each machine. Each application (the server) is supposed to access a collection in the local mongo database.

The server creates a connection to the local database collection as follows:

const url = "myUser:myPass@localhost:27017/local?authSource=admin"
const MyCollection = new Mongo.Collection('myCollection', { _driver: new MongoInternals.RemoteCollectionDriver(url) });

2 of the 3 meteor applications, i.e. the application connected to the primary database and secondary database are able to read/write from/to the collection.

However, the meteor application connected to the arbiter database runs into issues when it tries to execute the following code in the meteor startup function:

MyCollection.update({}, { $unset: { myData1: '', myData2: '' }}, { upsert: true });

It gets the following exception:

not authorized on local to execute command { find: "myCollection", filter: {}, limit: 1 }

I can use the URL declared in the url variable to connect to a mongo shell and perform reads and writes on the same collection in the local database.

When I checked the user permissions this is what I see in the mongo shell:

{
		"_id" : "admin.myUser",
		"user" : "myUser",
		"db" : "admin",
		"roles" : [
			{
				"role" : "readWrite",
				"db" : "meteorDB"
			},
			{
				"role" : "readWrite",
				"db" : "local"
			},
			{
				"role" : "read",
				"db" : "admin"
			},
			{
				"role" : "clusterAdmin",
				"db" : "admin"
			}
		]
	}

Therefore, it appears as if the user has the correct permissions.

Also, if I disable mongo DB security then the meteor application does not throw any exceptions.

I was wondering if someone could point out if I’m doing something wrong. Any help is much appreciated.