当前位置: 首页 > 知识库问答 >
问题:

在CosmosDB中查询JSON以查找违反varchar限制的字符串

胡越泽
2023-03-14
{
    "title": "My Json Data",
    "questions": [
      {
        "type": "Options",
        "position": 0,
        "text": "POTENTIONALLY LARGE STRING",
        "supportingQuestion": "POTENTIONALLY LARGE STRING",
        "options": [
          {
            "position": 0,
            "text": "Strongly Agree"
          },
          {
            "position": 1,
            "text": "Agree"
          },
          {
            "position": 2,
            "text": "Neutral"
          },
          {
            "position": 3,
            "text": "Disagree"
          },
          {
            "position": 4,
            "text": "Strongly Disagree"
          }
        ],
      },
      {
        "type": "Options",
        "position": 1,
        "text": "POTENTIONALLY LARGE STRING",
        "supportingQuestion": "POTENTIONALLY LARGE STRING",
        "options": [
          {
            "position": 0,
            "text": "Strongly Agree"
          },
          {
            "position": 1,
            "text": "Agree"
          },
          {
            "position": 2,
            "text": "Neutral"
          },
          {
            "position": 3,
            "text": "Disagree"
          },
          {
            "position": 4,
            "text": "Strongly Disagree"
          }
        ],
      }
    ]
}

我试着四处搜索,看看是否有任何操作符可以用于cosmos,但我一点运气都没有。

通过这样的查询,我可以搜索特定的违规者,但不能搜索我要搜索的一般违规者。

从c中选择*,其中ARRAY_CONTAINS(c.Questions,{text:“My question Text”},true)

        // Set some common query options.
        FeedOptions queryOptions = new FeedOptions { MaxItemCount = -1 };

        IQueryable<Forms> formQuery = client.CreateDocumentQuery<Forms>(
            UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId), queryOptions)
            .Where(f => f.FormType == "Evaluation");

        // Execute the query synchronously. 
        Console.WriteLine("Running LINQ query...");
        foreach (Forms FormType in formQuery)
        {
            Console.WriteLine($"\tRead {FormType}");
        }

        // Now execute the same query using direct SQL.
        IQueryable<Forms> formQueryInSql = client.CreateDocumentQuery<Forms>(
            UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId),
            selectLabel.Text + @" " + QueryBox.Text,
            //"SELECT * FROM c",
            queryOptions);

        Console.WriteLine("Running direct SQL query...");
        foreach (Forms Item in formQueryInSql)
        {
            Console.WriteLine($"\tRead {Item.Id}");
        }

共有1个答案

夏才
2023-03-14

看起来您使用的是SQL API,所以我将基于这个假设来回答。您可以创建一个查询,该查询遍历问题数组并提取要查找的字符串长度。

您可以通过门户或从API运行这些查询,但是门户有时会选择只处理数据子集,因此结果可能不准确。这意味着对于较大的数据集,您可能确实希望从代码中运行它们,但对值进行排序的工作将转移到CosmosDB,而不是试图在本地计算机上加载所有内容。

SELECT 
    c.position,
    c.text,
    LENGTH(c.text) AS textLength,
    c.supportingQuestion,
    LENGTH(c.supportingQuestion) AS supportingQuestionLength
FROM c IN items.questions
WHERE LENGTH(c.text) > 200 OR LENGTH(c.supportingQuestion) > 200

您的测试Json创建此输出(我将过滤器减少到20,以便得到结果):

[
    {
        "position": 0,
        "text": "POTENTIONALLY LARGE STRING",
        "textLength": 26,
        "supportingQuestion": "POTENTIONALLY LARGE STRING",
        "supportingQuestionLength": 26
    },
    {
        "position": 1,
        "text": "POTENTIONALLY LARGE STRING",
        "textLength": 26,
        "supportingQuestion": "POTENTIONALLY LARGE STRING",
        "supportingQuestionLength": 26
    }
]
SELECT 
    MAX(LENGTH(c.text)) AS textLength,
    MAX(LENGTH(c.supportingQuestion)) AS supportingQuestionLength
FROM c IN items.questions
[
    {
        "textLength": 26,
        "supportingQuestionLength": 26
    }
]
 类似资料:
  • 问题内容: 我正在寻找一种在字符串中查找JSON数据的方法。像wordpress简码一样思考它。我认为最好的方法是使用正则表达式。我不想解析JSON,只需查找所有出现的事件。 正则表达式中是否有办法使括号的数量匹配?目前,当我嵌套对象时遇到了这个问题。 演示的快速示例: 结果,我想要两个JSON字符串。谢谢! 问题答案: 从给定的文本中提取JSON字符串 由于您正在寻找一种简单的解决方案,因此可以

  • 我想构建一个cosmosdb sql查询,因为我使用的是rest接口,它接受sql查询(不要问为什么,我不能改变它:()... 你知道我有什么变通办法吗?或者可能只是一个很好的包,我可以用来转义我自己的字符串。 T

  • 问题内容: Mediawiki在数据库“文本”中有一个包含页面内容的表。它被保存为[BLOB]文件。我想运行一个查询来搜索网站上的所有文本,以查看哪些页面包含特定的“字符串”。如何运行查询来搜索[blob]文件? 问题答案: Mediawiki标记文本存储在字段中,该字段是中 号 类型。您可以像其他任何基于文本的字段一样查询它。MySQL会将您的字符串转换为二进制以进行查询。请注意,这是区分大小写

  • 问题内容: 我的表格中有一个字段,其中包含逗号分隔的字符串,例如。每个数字代表可用的颜色。 运行查询以获取所有红色衬衫(颜色= 1)时,我还会获取颜色为灰色(= 12)和橙色(= 15)的衬衫。 我应该如何重写查询,以便仅选择颜色1而不是选择所有包含数字1的颜色? 问题答案: 经典方法是在左右添加逗号: 但是find_in_set也可以:

  • 问题内容: 要求 : 通用查询/函数,用于检查表的varchar列中提供的值是否实际上是数字,并且精度不超过允许的精度。 可用值: 表名称,列名称,允许的精度,允许的比例 一般建议是创建一个函数并使用to_number()来验证值,但是不会验证允许的长度(精度标度)。 我的解决方案: 使用Regexp验证号码 验证左部分的长度(十进制前)(我不知道它的实际名称是什么),因为对于小数位数,oracl

  • 问题内容: 我非常确定我们不能将LIMIT子句用于我想做的事情-因此想确定是否还有其他方法可以实现此目的。 我有一个表,其中捕获了哪个用户访问了哪个商店。每次用户访问商店时,都会在此表中插入一行。 一些领域是 shopping_id(primary key) store_id user_id 现在,我想要的是-对于给定的一组商店,找到访问该商店的最大次数的前5位用户。 我可以一次在1个商店中进行以