Я пытаюсь вставить объект в mongodb через запрос POST. Объект, который я отправляю, успешно вставляется в базу данных, однако я получаю сообщение об ошибке, упомянутое выше.
Пакет, который я использую для mongo db:
Строка подключения
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, и они, кажется, ничего не упоминают о «заботе о написании» и «большинстве». Также попытался просмотреть документацию и погуглить ошибку, но не нашел ничего полезного.
@kostix Я использую его через Atlas, так что, я полагаю, все должно быть в порядке (?)
Кроме того: совершенно неясно, как создается ваш объект базы данных (и какой пакет Go вы используете для доступа к MongoDB). (И я, честно говоря, понятия не имею, что такое «Атлас»; это связано с программированием на Go? Вы имеете в виду это?)
@kostix отредактировал мой вопрос, спасибо. Да, это то, что я имел в виду.
@kostix Хорошо, это тоже понял.
Можем ли мы также увидеть используемую строку подключения (с любыми паролями, если они есть, замененными чем-то вроде «***»)? ;-)
@kostix понял)
@kostix омг, только что нашел! Ошибка исчезла, когда я удалил параметры, которые шли после '?' в строке подключения..... Большое спасибо
Да, это w=majority
похоже на это. В любом случае, если вы только что скопировали и вставили его куда-то, всегда полезно сначала отсеять все, что вы не понимаете напрямую ;-)
@kostix Да, скопировал это из официального примера MongoDB Atlas, поэтому предположил, что это подходит для общего использования, в следующий раз буду более бдительным x)
Если вы следовали опубликованной документации и используете текущую версию драйвера, это похоже на ошибку в драйвере.
"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
, но потом внезапно оно начало выдавать мне то же сообщение об ошибке. Я удалил и снова работает. Почему это работало раньше?
Он работает так, как я хочу.
Я получил ту же ошибку с дополнительным пробелом в конце строки подключения. В моем случае я удалил пробел, и все было хорошо.
Я получил эту ошибку, случайно оставив дополнительную кавычку в URI. Я предполагаю, что это в основном вызвано плохой конфигурацией.
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
спасибо большое, это спасло меня! :)
Такого рода ошибки можно легко устранить с помощью расширения, такого как Prettier, с такой настройкой, как { trailingComma": "all" }
.
в моем случае я удалил / в конце 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,
удалить двойные кавычки в конце URL-адреса mongodb
Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительные сведения, которые помогут другим понять, как это отвечает на заданный вопрос. Вы можете найти больше информации о том, как писать хорошие ответы в справочном центре.
Вы уверены, что ваша MongoDB не ниже версии 2.4 или выше?