在Mongoose中定义变体类型

Sof*_*mur 5 javascript ocaml object mongoose mongoose-schema

我熟悉variantOCaml的类型.例如,

type foo =
    | Int of int
    | Pair of int * string
Run Code Online (Sandbox Code Playgroud)

我知道如何定义NumberString在MongoDB中,但我的问题是,如何在MongoDB中定义为上面的变量类型:

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

有谁有想法吗?

编辑1:我刚刚找到了这个答案这个答案.他们使用类或函数来模仿variant.它在前端的JavaScript中运行良好.但问题是,是否可以将它们放入Schema

bri*_*bri 1

我认为猫鼬希望你使用嵌套类型将属性声明为对象。使用上面的 foo 类型:

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

或者 - 你可以平底船并使用mixed- 但这对我来说似乎真的很软弱。

或者 - 本着 oCaml 的真正精神 - 您可以使用模式(类型+对象)定义 var:

 ...
 variant: {
    varType: [Number],
    varInfo: [Mixed]
 }
Run Code Online (Sandbox Code Playgroud)

其中 varInfo 的结构取决于 varType。这将使您的 mongo 查询更易于管理。

希望这就是您正在寻找的方向!仅供参考 - 我发现这篇简单的文章非常有帮助。