Массив Meteor collection2 со строками и объектом

Я использую Meteor с collection2, и у меня есть массив, который выглядит следующим образом:

productTypes = ["string1", "string2", "string3", {Other: "test"}]

По сути, в массиве будет от 0 до 7 строк, а Other: Test может присутствовать или отсутствовать.

Итак, я пытаюсь создать схему, которая обрабатывает этот случай. Есть ли способ сказать ему, что в массиве будут строки и объект?

я пробовал

const residentSchema = new SimpleSchema({
  productTypes: {type: [String, Object], optional: true, blackbox: true},
})

Но это явно не сработает, потому что ожидается одна строка и один объект. Кто-нибудь знает, как я могу заставить эту работу? заранее спасибо

Изменить:

Сейчас я храню его в таком формате:

productTypes = {список: ["строка1", "строка2", "строка3"], Другое: "тест"}

но когда я добавляю такую ​​схему:

const productTypeSchema = new SimpleSchema({
  list: {type: Array},
  other: {type: String}
})

const residentSchema = new SimpleSchema({
  productTypes: {type: productTypeSchema},
})

Мое приложение вылетает. Когда я удаляю список строк: {type: Array}, все в порядке.

Допускается ли теперь Array как значение SimpleSchema?


person ruevaughn    schedule 24.06.2016    source источник
comment
Кроме того, может ли кто-нибудь объяснить, почему я не могу использовать {type: Array, blackbox: true}? Всякий раз, когда я использую это, мое приложение взрывается, я думаю, что здесь есть концепция, которую мне не хватает   -  person ruevaughn    schedule 24.06.2016


Ответы (1)


С collection2 у вас может быть массив примитивов или массив объектов, но не смешанный массив. Просто с точки зрения моделирования это действительно беспорядочно.

Я предлагаю вам реорганизовать свой массив вместо:

productTypes = ["string1", "string2", "string3", {Other: "test"}]

Например:

productTypes = { list: ["string1", "string2", "string3"], Other: "test"}
person Michel Floyd    schedule 24.06.2016
comment
Спасибо, это отличная идея, я уже решил, что мне, наверное, нужно сделать что-то подобное. Поскольку это было так сложно сделать, я решил, что есть причина, по которой он не поддерживался. - person ruevaughn; 24.06.2016
comment
Просто хотел отметить, что переключение на productTypes = {list: [string1, string2, string3], Other: test} фактически привело к значительной очистке моего кода. Спасибо еще раз - person ruevaughn; 26.06.2016
comment
Кроме того, теперь, когда я переключил его, у меня возникла та же проблема с объявлением массива в простой схеме. Вы могли бы посмотреть на это? Смотрите мою правку. - person ruevaughn; 26.06.2016
comment
Вы должны объявить list: {type: [String]}, чтобы указать, что list является массивом строк. - person Michel Floyd; 27.06.2016