【问题标题】:MongoDB error: Cannot use 'commands' readMode, degrading to 'legacy' modeMongoDB 错误:无法使用“命令”读取模式,降级为“旧”模式
【发布时间】:2016-04-10 14:18:15
【问题描述】:

所以我正在使用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

我应该如何解决这个问题?

问候, 达里尔

【问题讨论】:

  • 重启 mongo shell 并发出 db.getMongo().forceReadMode("legacy") 或 db.getMongo().forceReadMode("compatibility") 命令。
  • 您的 shell 和 DB 版本可能不一样。 stackoverflow.com/questions/24916320/…

标签: mongodb mongo-shell


【解决方案1】:

我只是重新启动 mongod 进程并为我工作。

【讨论】:

    【解决方案2】:

    我不知道您是否是拥有replica set 并失去Primary db 的受害者。
    如果是这样,请在插入之前重新创建主节点或使用此命令。

    db.getMongo().setSlaveOk();
    

    【讨论】:

      【解决方案3】:

      不能使用'commands' readMode,降级为legacy mode

      rs-ds017231:PRIMARY> show dbs
      
      rs-ds017231:PRIMARY> db
      
      rs-ds017231:PRIMARY>db.collection_name.insert({})
      

      它对我有用!

      【讨论】:

        【解决方案4】:

        扩展上面@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.x 设置说明,而是添加了一个很好的免责声明,即不再维护该文档。我不知道如何下载旧版本。我真的需要在 mLab 上更新我的 mongo 版本,但一直推迟它,因为担心这会是一个重大变化。
        【解决方案5】:
        db.getCollection(collectionName).count({});
        db.getCollection(collectionName).find({});
        

        有效!也许mongo需要其他操作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-22
          • 1970-01-01
          • 1970-01-01
          • 2018-02-23
          • 2011-02-15
          相关资源
          最近更新 更多