Пн go не позволяет сохранять дублирующиеся данные даже после указания как не уникального - PullRequest
0 голосов
/ 01 февраля 2020

Я указал firstname и lastname MongoDB поля, чтобы не был уникальным, но я все еще сталкиваюсь с проблемой, которую я не могу назвать неуникальными именами и фамилиями.

Как указать для MongoDB, можно иметь дубликаты firstname и lastname?

extend type Mutation {
    signUp(
      firstname: String!
      lastname: String!
      email: String!
      password: String!
    ): Token!

...

const userSchema = new mongoose.Schema(
  {
    email: {
      type: String,
      unique: true,
      required: true,
      validate: [isEmail, 'Not a valid email'],
    },
    firstname: {
      type: String,
      unique: false
    },
    lastname: {
      type: String,
      unique: false
    },
    password: {
      type: String,
      required: true,
      minlength: 7,
      maxlength: 42,
    },
  },
  {
    timestamps: true,
  },
);

Ошибка:

E11000 duplicate key error collection: testDb.users index: firstname_1 dup key: { firstname: "Test" }

Ответы [ 2 ]

1 голос
/ 01 февраля 2020

unique: false не заставляет mon goose отбрасывать ваши конкретные индексы. Поскольку у вас уже есть индексы, созданные в базе данных, вы должны удалить их, используя оболочку mon go вручную или программно.

В оболочке mon go это будет выглядеть как

db.users.dropIndex('firstname_1');
db.users.dropIndex('lastname_1');

Но перед этим лучше дважды проверить точные имена индексов, и для этого у нас есть следующая команда

db.users.getIndexes();
1 голос
/ 01 февраля 2020

Поскольку вы создали уникальный индекс для своей коллекции, как он говорит firstname_1 dup key: { firstname: "Test" }, вам нужно сначала удалить его, прежде чем вставлять дубликаты документов. В общем, вы должны упомянуть unique:true для поля в схеме mon goose, чтобы создать уникальный индекс из кода в первый раз, а не выполнять команды БД вручную, в любом случае в реальных условиях индексы создаются в базе данных. Таким образом, изменение кода не удаляет существующие индексы в базе данных. Либо вы должны запустить dropIndex вручную в БД, либо через mon goose попробовать drop-indexes-using-mon goose:

db.users.dropIndex( "firstname_1" )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...