странная ошибка mongodb и мангуста: не мастер и slaveOk=ложная ошибка
Я получаю странную ошибку в моем узле.приложение на JS
not master and slaveOk=false code 13435
Я делаю запрос findOne, используя mongoose 4.0.2, нажимая mongodb 3.0.1. Запрос работал сегодня утром.
что это за ошибка? Я работаю на mongohq по их стандартному плану на Гб.
4 ответов
это означает, что вы пытаетесь читать из вторичного узла в наборе реплик, вы можете читать только из первичного узла по умолчанию.
вы можете разрешить вторичному узлу принимать чтения, запустив rs.slaveOk()
в оболочке mongo, которая подключена к этому вторичному узлу. Не рекомендуется разрешать чтение из вторичного узла, поскольку вы можете считывать устаревшие данные, если узел еще не синхронизирован с первичным узлом.
Я решил это, просто исправив URI мой узел.js использовал для подключения к MongoDB с Мангустом.
когда эта ошибка ocurred, мой URI был
mongodb://user:password@host:port/datatabase
,
и это дает мне ошибку не мастер и slaveOK=ложь.
затем я изменил URI, чтобы добавить информацию о наборе реплик, и URI стал чем-то вроде этого:
mongodb://user:password@host:port,replicaSetHost:replicaSetPort/database?replicaSet=rs-someServer
.
теперь я не знаю, является ли это общим шаблоном, потому что эта конфигурация используется MongoLab, где размещается моя база данных. Тем не менее, вероятно, вы решите проблему, добавив информацию о наборе реплик в URI.
вероятно, ваш главный узел не удался, и вы пытаетесь читать с ведомого узла, но по умолчанию (и практика безопасности, такая как синхронизация данных) ваш источник чтения установлен только на первичный узел. Вы можете прикрепить параметры в конце строки подключения, такие как '?readPreference=secondary', если, например, используется узел.