如何为动态密钥字典定义mongoDB mongoose模式?

时间:2018-03-11 17:39:59

标签: mongodb dictionary dynamic database-schema mongoose-schema

我有一个MongoDB集合users,我想用动态密钥存储一个字典。我希望users在MongoDB中看起来像这样:

{
    "_id": {
        "$oid": "5a9f5b3400e2f61a0c5f449b"
    },
    "profile": {
        "votes": {
            dynamicKey1Here: {
                constantKey: 'value',
                constantKey2: 'value2'
            },
            dynamicKey2Here: {
                constantKey: 'value',
                constantKey2: 'value2'
            },
            // more dynamic keys here...
    }
}

但我不知道如何定义我的架构。到目前为止,我有:

const userSchema = new Schema({
    profile: {
        votes: {DynamicKeyEntry}
    }
});

那么我如何定义DynamicKeyEntry的架构?

const DynamicKeyEntry = new Schema(
    // HOW DO I DEFINE DYNAMIC KEYS?
);

2 个答案:

答案 0 :(得分:1)

因为您提到您使用的是猫鼬,所以您也可以使用 Map 或 Mixed 类型。 Map 类型允许您设置动态键并仍然为值强制执行某些模式:

votes: {
      type: Schema.Types.Map,
      of: new Schema(
        {
          constantKey: {
            type: Schema.Types.String,
            required: true,
          }
        }
      )  
...

混合类型为您提供完全控制权,但您希望在应用程序端正确验证数据,否则最终可能会一团糟。

votes: {
   type: Schema.Types.Mixed,
}

答案 1 :(得分:0)

如果您可以使用@Valid @RequestParam(value = "checked", required = false) long[] checkboxvalues ,那么它可以更好地存储和提取数据,例如:

aray

现在,您可以在 votes: { type: Array } 中存储多个对象作为您的要求