Meteor Collection2: ошибка дублирования ключа для вложенного uniq

Я пытаюсь сделать быстрый скрипт для инициализации моих коллекций разработки в Meteor и обнаружил кое-что странное.

Вот уменьшенный пример того, что я получил:

    B = new SimpleSchema({
      name: { type: String, unique: true }
    })

    A = new SimpleSchema({
      name: { type: String, unique: true },
      bs: {type: [B], defaultValue: []}
    })

    As = new Mongo.Collection('as')
    As.attachSchema(A)

    As.remove({}, (e) => {
      As.insert({name: 'a_1', bs: []})
      As.insert({name: 'a_2', bs: []})
      As.insert({name: 'a_3', bs: []})
    })

Когда мое приложение запускается, я получаю следующую ошибку:

MongoError: E11000 duplicate key error index: meteor.as.$c2_bs.$.name  dup key: { : null }

Проверяя базу данных, я вижу, что записи были созданы, и нет B, а тем более с нулевым именем.

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

Удаление ограничения uniq из схемы B устраняет ошибку (но, конечно, также позволяет мне вставлять недопустимые записи).

Есть ли что-то, что я упускаю? Разве я не должен использовать uniq во вложенных схемах?


person Nicolás Scarcella    schedule 19.02.2016    source источник
comment
Возможный дубликат E11000 повторяющийся индекс ошибки ключа в mongodb mongoose   -  person Stephen Woods    schedule 20.02.2016


Ответы (1)


Хорошо, похоже, что установка разреженного ключа на true устраняет проблему с индексом:

B = new SimpleSchema({
  name: { type: String, unique: true, sparse: true }
})

A = new SimpleSchema({
  name: { type: String, unique: true },
  bs: {type: [B], defaultValue: []}
})

Я до сих пор не уверен, что это хорошая практика (если я хочу повторно использовать схему B в независимой коллекции, она все равно будет использовать разреженный индекс), но, похоже, я не нашел лучшего способа.

person Nicolás Scarcella    schedule 20.02.2016