【问题标题】:Schema to save key-value pairs in a property - Mongoose将键值对保存在属性中的模式 - Mongoose
【发布时间】:2021-05-20 22:15:57
【问题描述】:

所以,我的 Mongoose 中有以下架构:

// MODEL
const PortletSchema = new Schema({
    slug: String,
    version: String,
    environment: String,
    scap: Number,
    country: {
        type: String,
        uppercase: true
    },
    _keys: [{ key: String, value: String }]
});

在“_keys”数组中,我想像这样保存一个键值 JSON:

// EXPECTED WAY TO STORE DATA INSIDE THE _keys PROPERTIES
{
    [
        {"key": "value"},
        {"anotherKey": "Another Value" }
    ]
}

这样,我可以在 _keys 属性中使用“动态键”,而不是像这样定义它:

// HOW I STORE THEM TODAY
[{ key: String, value: String }]

为什么我想要这个?:这将由 Java 应用程序通过服务读取,它希望映射该数组以获取如下键:${anotherKey}

目前,在将信息发送到 Java 应用程序之前,我创建了一个库来将密钥更改为第一次提到的方式。所以 java 应用程序像第二段代码一样接收它们。

我希望我可以在 _keys 中存储一个 json 文件,以便按照我需要的方式发送信息。

非常欢迎任何帮助或建议!

【问题讨论】:

  • _keys 的预期 json 架构不是有效的 json!
  • 感谢@KayvanMazaheri,实际上我忘记输入正确的属性了,就像现在这样:_keys: [{ key: String, value: String }] 谢谢!
  • 您实际上不能像这样“键入”,因为您告诉架构实际上要确保所有条目都遵循 { "key": "data ", "value": "data" }` 模式。所以这个模式说它必须有键 "key","value" 并且没有其他名称。如果您希望它是“可变的”,那么您可以使用_keys: [Mixed] 甚至只是_keys: []。您“可以”添加自定义验证以确保这始终是每个对象的 两个 键。但是模式类型本身不能单独做到这一点。
  • 感谢@NeilLunn,这正是我所需要的,而且效果很好。

标签: node.js mongoose


【解决方案1】:

正如@NeilLunn 所建议的,我使用了这样的_keys 值:

_keys: []

这让我可以在里面插入任何类型的对象。

【讨论】:

    【解决方案2】:

    你可以使用地图

    const schema: Schema = new Schema({
        _keys: {
            type: Map,
            of: Object,
        },
     });
    

    检查这个: https://mongoosejs.com/docs/schematypes.html#maps

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-15
      • 2017-12-30
      • 1970-01-01
      • 2012-10-28
      • 2018-08-15
      • 2014-03-02
      • 1970-01-01
      • 2020-04-22
      相关资源
      最近更新 更多