检查 CosmosDB 查询中的参数是否为空

Check if parameter is null in CosmosDB query

如何在查询数据库时检查@azure/cosmos sdk中的参数是否为空?

我试过 IS_NULL 或 IS_EMPTY,要么中断查询:

await container.items
  .query({
    query: `
        SELECT * from company
        WHERE company.location = @location

        AND (@dateFrom IS NULL OR company.createdAt >= @dateFrom)
        AND (@dateTo IS NULL OR company.createdAt < @dateTo)

        ORDER BY company.createdAt DESC
    `,
    parameters: [
        { name: "@location", value: "Germany" },
        { name: "@dateFrom", value: new Date().setFullYear(new Date().getFullYear() - 5)},
        { name: "@dateTo", value: new Date() },
    ]
  })
  .fetchAll();

我收到这个错误:

Message: {\"errors\":[{\"severity\":\"Error\",\"location\":{\"start\":243,\"end\":245},\"code\":\"SC1001\",\"message\":\"Syntax error, incorrect syntax near 'IS'.\"}]}

我在 IS_DEFINED 表达式的帮助下弄明白了:

AND (IS_DEFINED(@dateFrom) = false OR company.createdAt >= @dateFrom)
AND (IS_DEFINED(@dateTo) = false OR company.createdAt < @dateTo)

我发现 IS_DEFINED 函数并不是我们所需要的,因为 属性 通常被定义,但包含一个空值。

相反,我发现 IS_NULL 函数可以工作:

AND (IS_NULL(@dateFrom) = true OR company.createdAt >= @dateFrom)
AND (IS_NULL(@dateTo) = true OR company.createdAt < @dateTo)