Определить тип варианта в мангусте - PullRequest
0 голосов
/ 28 апреля 2018

Я знаком с variant типом OCaml. Например,

type foo =
    | Int of int
    | Pair of int * string

Я знаю, как определить Number и String в MongoDB, но мой вопрос заключается в том, как определить тип варианта, как указано выше в MongoDB:

var PostSchema = new mongoose.Schema({
    num: { type: Number },
    name: { type: String },
    variant: ???
})

У кого-нибудь есть идеи?

Редактировать 1: Я только что нашел этот ответ и этот ответ . Они используют классы или функции для имитации variant. Это хорошо работает в JavaScript в Front-end. Однако вопрос в том, можно ли их поставить в Schema?

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Вы можете использовать этот код, см. Документацию по Монго здесь. https://docs.mongodb.com/manual/reference/operator/query/type/

var PostSchema = new mongoose.Schema({
    num: { type: Number },
    name: { type: String }, 
    variant: { $type: [ Int: “int” , Pair:[“int”, “string” ] } 
0 голосов
/ 28 апреля 2018

Я думаю, что mongoose хочет, чтобы вы использовали вложенный тип для объявления свойства как объекта. Используя ваш тип foo выше:

var PostSchema = new mongoose.Schema({
   num: [Number],
   name: [String],
   variant: {
      fooInt: [Number]
      fooPair: {
         fooInt: [Number],
         fooString: [String]
      }
    }
 });

Или - вы могли бы надеть и использовать mixed - но это мне кажется действительно бесполезным.

Или - в истинном духе oCaml - вы можете определить эту переменную, используя шаблон (тип + объект):

 ...
 variant: {
    varType: [Number],
    varInfo: [Mixed]
 }

Где структура varInfo зависит от varType. Это сделало бы ваши монго запросы eaiser для управления.

Надеюсь, это направление, которое вы искали! К вашему сведению - этот простой пост действительно полезен.

...