【问题标题】:Validating strings in cosmosdb collection验证 cosmosdb 集合中的字符串
【发布时间】:2018-05-12 00:07:31
【问题描述】:

我有一个带有文档的 cosmos db 集合,现在我想要的是当我在该集合中创建一个新文档时(我使用 .net 文档 DB API),我可以验证一些值。例如 我的文档有一个字段Name,我希望只插入PeterJohn。 cosmosdb 中是否存在一种机制,以便我可以进行此类验证,还是只能从应用程序代码中进行验证?

【问题讨论】:

    标签: c# .net azure azure-cosmosdb document-database


    【解决方案1】:

    cosmosdb 中是否存在一种机制,以便我可以这样做 验证还是只能通过应用程序代码进行验证?

    因此,服务级别不存在此类验证,因为这些验证是特定于您的应用程序的。您只需要在应用程序代码中处理它们。

    【讨论】:

    • 问这个问题是因为在 sql 工作中有一个像“Check”这样的约束:stackoverflow.com/questions/2441427/…
    • 我没有尝试过,但您可以创建一个触发器(之前 + 创建)并将检查放在那里。这样您就不必担心将其放入应用程序代码中。
    【解决方案2】:

    正如 Gaurav Mantri 所说,您可以利用 Database triggers 来验证文档中的属性,如下所示:

    注意:触发器不会自动调用,需要在调用相关操作时明确指定触发器。以下是新建文档的代码示例,您可以参考:

    var result = await client.CreateDocumentAsync(UriFactory.CreateDocumentCollectionUri(
        DatabaseId, 
        DocumentCollectionId),
        doc,
        new RequestOptions() {
            PreTriggerInclude=new List<string>() { "validateDocContent" }
        });
    

    如果验证失败,你会得到如下异常:

    另外,这里有一个类似的问题,你可以关注here

    【讨论】:

      【解决方案3】:

      MongoDb 使用 JSON Schema 在插入和更新时验证文档。

      CosmosDb 没有提供任何类似的功能,但是,

      CosmosDb 提供触发器cosmos-db/stored-procedures-triggers-udfsazure-cosmosdb-js-server/samples/triggers/

      可以在触发器中使用javascript-validator 在插入容器之前验证架构/文档。

      我没有可用的示例,但我正在研究它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-21
        • 1970-01-01
        相关资源
        最近更新 更多