Ошибка «Нет режима записи с именем «большинство» в конфигурации набора реплик»

Я пытаюсь вставить объект в mongodb через запрос POST. Объект, который я отправляю, успешно вставляется в базу данных, однако я получаю сообщение об ошибке, упомянутое выше.

Пакет, который я использую для mongo db:

https://github.com/mongodb/mongo-go-driver

Строка подключения

mongodb+srv://пользователь:пароль@bookcluster.pxcqs.mongodb.net/DBname?retryWrites=true&w=majority`

Как я настроил соединение с базой данных:

var DbConn *mongo.Client //*sql.DB //*mongo.Client

func SetupDB(conn_str string) {
    var err error
    DbConn, err = mongo.NewClient(options.Client().ApplyURI(conn_str))
    if err != nil {
        log.Fatal(err)
    }
    ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
    err = DbConn.Connect(ctx)
    if err != nil {
        log.Fatal(err)
    }
}

Мой объект:

package book

import "go.mongodb.org/mongo-driver/bson/primitive"

type Book struct {
    Id        primitive.ObjectID `json:"id,omitempty" bson:"_id,omitempty"`
    Title     string             `json:"title" bson:"title"`
    Author    string             `json:"author" bson:"author"`
    Year      int                `json:"year" bson:"year"`
    ShortDesc string             `json:"shortDesc" bson:"shortDesc"`
    Genre     string             `json:"genre" bson:"genre"`
}

Вот как я отправляю запрос внутри insertBook() (где b имеет тип Book):

ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
    defer cancel()

    result, err := database.DbConn.Database(dbName).Collection(collectionName).InsertOne(ctx, b)

Полный текст ошибки:

несколько ошибок записи: [{ошибки записи: []}, {(UnknownReplWriteConcern) Режим отсутствия проблем с записью с именем «большинство» найдено в конфигурации набора реплик}]

Моя просьба в Почтальоне

Я не уверен, что мне где-то не хватает какой-то настройки конфигурации - я только начал с mongoDB Я попытался следовать примеру, приведенному в этих уроках: 3 , 4, и они, кажется, ничего не упоминают о «заботе о написании» и «большинстве». Также попытался просмотреть документацию и погуглить ошибку, но не нашел ничего полезного.

Вы уверены, что ваша MongoDB не ниже версии 2.4 или выше?

kostix 15.12.2020 13:39

@kostix Я использую его через Atlas, так что, я полагаю, все должно быть в порядке (?)

alais1 15.12.2020 13:43

Кроме того: совершенно неясно, как создается ваш объект базы данных (и какой пакет Go вы используете для доступа к MongoDB). (И я, честно говоря, понятия не имею, что такое «Атлас»; это связано с программированием на Go? Вы имеете в виду это?)

kostix 15.12.2020 13:44

@kostix отредактировал мой вопрос, спасибо. Да, это то, что я имел в виду.

alais1 15.12.2020 13:57

@kostix Хорошо, это тоже понял.

alais1 15.12.2020 14:03

Можем ли мы также увидеть используемую строку подключения (с любыми паролями, если они есть, замененными чем-то вроде «***»)? ;-)

kostix 15.12.2020 14:08

@kostix понял)

alais1 15.12.2020 14:15

@kostix омг, только что нашел! Ошибка исчезла, когда я удалил параметры, которые шли после '?' в строке подключения..... Большое спасибо

alais1 15.12.2020 14:18

Да, это w=majority похоже на это. В любом случае, если вы только что скопировали и вставили его куда-то, всегда полезно сначала отсеять все, что вы не понимаете напрямую ;-)

kostix 15.12.2020 15:23

@kostix Да, скопировал это из официального примера MongoDB Atlas, поэтому предположил, что это подходит для общего использования, в следующий раз буду более бдительным x)

alais1 16.12.2020 08:50

Если вы следовали опубликованной документации и используете текущую версию драйвера, это похоже на ошибку в драйвере.

D. SM 17.12.2020 02:04
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
10
11
20 037
14
Перейти к ответу Данный вопрос помечен как решенный

Ответы 14

Ответ принят как подходящий
"mongoURI" : "mongodb+srv://${ db user name }:${ db password }@cluster0.mde0j.mongodb.net/cluster0?retryWrites=true&w=majority "

Я получаю ту же ошибку с этим когда я пытаюсь вставить объект в mongodb через запрос POST. Объект, который я отправляю, успешно вставляется в базу данных, однако я получаю сообщение об ошибке errmsg: «Нет режима записи с именем« большинство »в конфигурации набора реплик».

его простая ошибка, вам нужно удалить часть &w=majority в конце, и она будет решена

Weid. В конце концов, это сработало для меня с этим &w=majority, но потом внезапно оно начало выдавать мне то же сообщение об ошибке. Я удалил и снова работает. Почему это работало раньше?

Fabricio 22.11.2021 15:15

Он работает так, как я хочу.

Menai Ala Eddine - Aladdin 17.03.2023 11:41

Я получил ту же ошибку с дополнительным пробелом в конце строки подключения. В моем случае я удалил пробел, и все было хорошо.

Я получил эту ошибку, случайно оставив дополнительную кавычку в URI. Я предполагаю, что это в основном вызвано плохой конфигурацией.

user2998553 22.09.2022 15:25
mongodb+srv://user:[email protected]/DBname?retryWrites=true&w=majority`

Удалите этот ( ` ) в конце URI, потому что это вызовет ошибку «Нет режима записи с именем «большинство» в конфигурации набора реплик».

Проблема не в &w=majority. Если ваша строка подключения находится внутри файла .env, напишите ее, как показано ниже, без одинарных или двойных кавычек и без точки с запятой в конце.

URI=mongodb+srv://user:[email protected]/DBname?retryWrites=true&w=majority

спасибо большое, это спасло меня! :)

Yoshi 12.01.2022 13:55

Такого рода ошибки можно легко устранить с помощью расширения, такого как Prettier, с такой настройкой, как { trailingComma": "all" }.

Upulie Han 04.08.2022 15:20

в моем случае я удалил / в конце uri, и это сработало.

В моем случае я также столкнулся с этой же ошибкой. Мое решение для этого, когда я удалил косую черту из последнего (этот --> большинство/), моя проблема была решена.

Ошибка перед строкой: - mongodb+srv://deepu:[email protected]/employeeDB?retryWrites=true&w=majority/

Решенная строка: - mongodb+srv://deepu:[email protected]/employeeDB?retryWrites=true&w=majority

Столкнулся с той же ошибкой со строкой подключения --->

вместо этого используйте строку подключения как «mongodb+srv://deepu:[email protected]/(databasename)»

Удалите все, что находится между .net/ и именем базы данных.

Надеюсь, это решит ваш вопрос!

Это может быть из-за использования пробела или точки с запятой в конце URL-адреса, который вы определили в файле .env. Поэтому не используйте кавычки, двойные кавычки, точки с запятой или пробелы. MONGO_URI = mongodb+srv://Hussain_Siddiqui:[email protected]/?retryWrites=true&w=majority Тем не менее это предупреждение удаляет &w=majority из URL-адреса

Попробуйте удалить все после mongodb.net/{databaseName}?retryWrites=true&w=majority и сделать его чистым и аккуратным, как показано ниже.

mongoose.connect("mongodb+srv://{nameOfAdmin}:{password}@atlascluster.ux104bi.mongodb.net/{databaseName}", {useNewUrlParser: true, useUnifiedTopology: true})

Удаление точки с запятой после URI из файла .env спасло меня.

Ошибка: mongodb+srv://имя пользователя:пароль@cluster0.hcyv7.mongodb.net/?retryWrites=true&w=majority;

Решено: mongodb+srv://имя пользователя:пароль@cluster0.hcyv7.mongodb.net/?retryWrites=true&w=большинство

Я решил проблему, удалив &w=majority. Потом я пошел немного вздремнуть. Я снова написал &w=большинство в uri. Это сработало очень хорошо.

Что происходит ! Я не знаю. Юзи получилось!

Я тоже столкнулся с той же проблемой. Удаление ; в конце строки подключения решил проблему для меня.

Посмотрите в конце URL-адреса, возможно, там есть space или запятая ;, которые являются недопустимыми символами в .env.

У меня была такая же ошибка, и причиной была запятая:

DB_URI = mongodb+srv://user:[email protected]/db?retryWrites=true&w=majority,

Другие вопросы по теме