我想将数组作为参数传递给SqlQuerySpec,以便在构建azure cosmos db的查询时能够在IN表达式中使用它。我正在尝试做的事情就像我们使用常规(字符串,整数等)参数:
private SqlQuerySpec BuildQuery(IEnumerable<string> exclTypes)
{
var queryText = "SELECT * FROM root r WHERE r.Type NOT IN (@types)";
var parameters = new SqlParameterCollection{new SqlParameter("@types", exclTypes.ToArray())};
return new SqlQuerySpec()
{QueryText = queryText, Parameters = parameters};
}
但这并不是这样的。我可以将数组作为参数传递给其他任何方式吗?谢谢。
您的查询应如下所示:
SELECT * FROM root r WHERE ARRAY_CONTAINS(@types, r.Type) <> true
然后你可以将@types
作为数组传递,并检查该数组是否包含文档中属性r.Type
中的值。
裁判:
https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-sql-query-reference#bk_array_contains https://github.com/Azure/azure-documentdb-node/issues/156
最简单的方法是设置一个表值参数。您的数组将作为TVP传递,因为它是一个表,它可以用作IN谓词的一部分。网上有很多关于此的资料。