Определение схемы мангуста на лету - PullRequest
4 голосов
/ 21 сентября 2011

У меня есть файл модели, в котором собраны все мои модели Mongoose. Одна из моделей, которую я хотел бы инициализировать с переменным количеством полей. В настоящее время я определяю больше полей, чем, по моему мнению, мне потребуется:

TallySchema = new mongoose.Schema
  0: Number
  1: Number
  ...
  20: Number

Очевидно, что это не идеально. Я вижу, что Mongoose позволит вам указывать параметры вне определения схемы, но не видит, как добавлять новые поля (или, я думаю, пути в Mongoose).

Ответы [ 4 ]

6 голосов
/ 21 сентября 2011

На основании документации mongoose похоже, что вы можете просто сделать:

schema.add({ field: Number })
3 голосов
/ 21 сентября 2011

Это должно быть проверено, но, глядя на источник, это будет возможно:

В конструкторе схемы он просто передает объект определения в this.add() ( source ).

Затем создаются реальные пути в Schema.prototype.add ( source ).

Так что, похоже, все, что вам нужно сделать, это что-то вроде:

// not sure what this looks like in CoffeeScript
TallySchema.add({ /* new property definition here */ });
1 голос
/ 02 июня 2014

Я нашел это на странице документации Mongoose :

var ToySchema = new Schema;
ToySchema.add({ name: 'string', color: 'string', price: 'number' });
0 голосов
/ 06 ноября 2012

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

new mongoose.Schema({
  average: Number,
  countPerRating: mongoose.Schema.Types.Mixed,
});

Это выдержка из схемы mapreduce. Я использую смешанный тип для хранения количества раз, когда кто-то дает определенный рейтинг, поэтому мы можем говорить такие вещи, как «10 1 звездных оценок, 45 4 звездных рейтинга» и т. Д.

смешанный тип отлично сработал.

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