Login
网站首页 > 文章中心 > 其它

MongoDb的|*|#8221;not_master_and_slaveok=false|*|#8221;错误及解决方法_mongodb的query多个查询条件

作者:小编 更新时间:2023-08-29 15:47:13 浏览量:355人看过

这种错误的常见原因是你的代码中没有正确地配置MongoDB的复制集群.如果配置不正确,则写请求将不会写入有效的主节点中.

MongoDb的-图1

以下是两个示例,展示了该错误发生时如何进行解决.

示例1:

错误信息:

Write operation on node xxx:27017 failed: not master and slaveok=false

这种错误通常表示你的代码试图将写请求路由到错误的节点上,而这个错误的节点不是主节点.

示例代码:

const MongoClient = require('mongodb').MongoClient;
const mongoUri = 'mongodb://example.com:27017,example.com:27018,example.com:27019/test?replicaSet=rs0readPreference=secondary';
const client = new MongoClient(mongoUri, { useNewUrlParser: true })

client.connect((error, db) => {
  if (error) {
console.log(+Master URI: ${result.primary}, node we're connecting to: ${mongoUri}+);
  });
});

在示例代码中,我们使用MongoDB官方Node.js库连接到了复制集群,其中设置了replicaSet和readPreference参数,这允许我们在副本集中连接到一个辅助节点.我们使用命令adminDb.command({ isMaster: 1 } 来获取主节点的URI,如果没有错误,那么URI会被打印出来,否则会打印出错误消息.

MongoError: not master and slaveok=false

在解决这个问题时,将MongoDB的默认写关注点设置为主节点,可以避免在错误的节点上写入数据.

示例代码:

const MongoClient = require('mongodb').MongoClient;
const mongoUri = 'mongodb://example.com:27017,example.com:27018,example.com:27019/test?replicaSet=rs0readPreference=secondary';
const client = new MongoClient(mongoUri, { useNewUrlParser: true })

client.connect((error, db) => {
  if (error) {
return;
  }

  // 设置主节点
  db.command({ setParameter: 1, internalQueryExecMaxBlockingSortBytes: 335544320 });
});

通过以上两个示例,我们可以看出,在MongoDB中出现"not master and slaveok = false"错误时,需要修正配置文件,确保所有的写操作都路由到正确的主节点上.除此之外,还可以通过设置MongoDB的默认写关注点来避免这个错误.

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章