Mongoose驱动程序的Mongodb碎片上没有查询权限

我为node.js使用mongoDB 2.6.7mongoose 3.8.23驱动程序。 数据库被分成2个分片(每个分开的副本),当我在任何实例,副本,mongos,configuration服务器等上inputmongo shell时,一切看起来都正常。

之后,我添加了pipe理员用户和用户 (名为normaluser )为我连接的特定数据库。 我已经将它们添加到mongos实例中。 用户是:

[ { "_id" : "admin.adminuser", "user" : "adminuser", "db" : "admin", "roles" : [ { "role" : "dbAdminAnyDatabase", "db" : "admin" }, { "role" : "readWriteAnyDatabase", "db" : "admin" }, { "role" : "userAdminAnyDatabase", "db" : "admin" }, { "role" : "clusterAdmin", "db" : "admin" } ] } ] 

 [ { "_id" : "mydb.normaluser", "user" : "normaluser", "db" : "mydb", "roles" : [ { "role" : "readWrite", "db" : "mydb" } ] } 

]

从我的node.js应用程序连接到mongos实例(我有2个mongos实例),如下所示:

 mongoose.createConnection('mongodb://mongos-ip-1:27018,mongos-ip-2:27018/mydb', {user : 'normaluser', password : 'some-password', mongos : true, server : {poolSize : 5, keepAlive : true}} 

我成功地连接到数据库,但是当我尝试从应用程序查询mydb.some-collection我得到这个错误:

  Possibly unhandled MongoError: not authorized for query on mydb.some-collection 

当我去一些mongos实例上的mongo shell并以normaluser的身份login时,我可以查询任何内容,并且可以。

有谁知道为什么我不能做任何查询,虽然我已经readWriteangular色给用户,并指定在mongoose的连接URL的用户? 也许我错过了mongoose的东西?

我甚至试图把dbOwner的angular色放在normaluser上 ,但没有任何改变

谢谢,伊万

伊凡,尝试这个语法:

 mongoose.createConnection('mongodb:// user:pass @localhost:port/db, ...', opts);