所以我使用mongo开发了一个项目,执行代码后出错了:
db.usercollection.insert({ "username" : "testuser1", "email" : "testuser1@testdomain.com" })
显示的错误是:
Cannot use 'commands' readMode, degrading to 'legacy' mode WriteResult({
"writeError" : {
"code" : 13,
"errmsg" : "not authorized on watersheds to execute command { insert: \"usercollection\", documents: [ { _id: ObjectId('568d0eda45d472b121116bef'), username: \"testuser1\", email: \"testuser1@testdomain.com\" } ], ordered: true }"
} })
db.version()是3.0.7,我安装的MongoDB shell版本是3.2.0
我该如何解决这个问题?
此致 Daryll
答案 0 :(得分:3)
db.getCollection(collectionName).count({});
db.getCollection(collectionName).find({});
有效!也许mongo需要其他操作。
答案 1 :(得分:2)
我只是重新启动mongod进程并为我工作。
答案 2 :(得分:1)
扩展@ Buzut上面的评论...
我刚遇到同样的错误。对我来说,问题是本地运行的客户端与云中运行的mongo db版本之间的版本差异。
要验证这是否是您的问题,请在本地运行mongo --version
并记下版本号。然后连接到您的mongo db shell并运行db.version()
以检查那里的版本。
如果这些数字存在重大差异(例如版本3客户端和版本2数据库),您可能需要切换到更接近数据库版本的客户端版本。
为此,请转到Mongo下载中心:https://www.mongodb.com/download-center#production
选择您的平台,然后单击“所有版本二进制文件”,并查找与您的托管数据库匹配的下载。
这将下载您需要解压缩的压缩文件。里面会有一个文件夹。只需使用/ bin / mongo可执行文件(在该文件夹中)的路径即可执行mongo命令。例如:
/path/to/downloads/mongodb-osx-x86_64-2.6.9/bin/mongo <whatever mongo commands you want>
希望有所帮助。
答案 3 :(得分:0)
我不知道你是否是replica set
并且遗失Primary db
的受害者。
如果是这样,请重新插入Primary,或在插入之前使用此命令。
db.getMongo().setSlaveOk();
答案 4 :(得分:-2)
无法使用'commands' readMode
,降级为legacy mode
,
rs-ds017231:PRIMARY> show dbs
rs-ds017231:PRIMARY> db
rs-ds017231:PRIMARY>db.collection_name.insert({})
对我有用!