【问题标题】:$jsonSchema how to use $ref$jsonSchema 如何使用 $ref
【发布时间】:2018-09-15 04:23:47
【问题描述】:

我正在使用 $jsonSchema 在 mongo 层上检查 json 模式验证。我需要定义一个多语言对象。我使用 $ref。但我收到错误消息 - $jsonSchema 关键字“定义”目前不受支持根据文档,它必须具有常见的 json-schema 行为。

 async install(): Promise<void> {
        let db = await this.dbContainer.getDb();
        let properties = _.fromPairs(this.config.languages.map((language) => {
           return  [language, {$ref: '#/definitions/post'}]
        }));
        await db.createCollection(
            this.collectionName,
            {
                validator: {
                    $jsonSchema: {
                        bsonType: 'object',
                        required: ['title', 'summary', 'link'],
                        definitions: {
                            post: {
                                title: {
                                    bsonType: 'string',
                                    description: 'Title is required'
                                },
                                summary: {
                                    bsonType: 'string',
                                    description: 'Summary is required'
                                },
                                href: {
                                    bsonType: 'string',
                                    description: 'Summary is required'
                                },
                            },
                        },
                        properties,
                    }
                }
            }
        );

有人有什么建议吗?我应该使用 json-schema 作为单独的库吗?

【问题讨论】:

    标签: mongodb validation jsonschema


    【解决方案1】:

    MongoDB 只实现了部分 JSON Schema 规范。

    如果您想确保数据库中的 JSON 数据始终有效,您似乎无法使用 definitions,并且必须复制/粘贴您的架构部分。

    另外,您可以在将数据插入数据库之前使用 JSON 模式。但是,如果您允许在不使用 JSON 架构的情况下写入数据库,则必须考虑数据库中可能没有有效数据(由架构定义)的影响。

    在数据库层使用 JSON Schema 将自动进行验证,而在应用程序层进行验证则需要您为要验证的每种类型的事物编写代码来执行此操作。

    【讨论】:

    • 我同意你的看法。到目前为止,这是最合适的解决方案。我还看到了带有嵌套内联验证器的解决方案。我希望有人会评论说这是可能的。
    • 这真的让我很失望,只是自己碰到的。有人知道他们是否要修复吗?
    • @MichaelWrighton 如果这是您想要的,请告诉他们。我什至无法与他们交流,甚至无法谈论 JSON Schema。很奇怪。
    【解决方案2】:

    here 中描述的 JSON Schema 与 mongo 中引入的 jsonSchema 相似但不同。

    在 mongo 文档的 ommision 部分,您可以看到 $ref 不受支持。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-10
      • 2019-08-05
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      相关资源
      最近更新 更多