如何使用 SQL API 将 JSON 对象数组作为参数传递给 ARRAY_CONTAINS 函数
How to pass JSON array of objects as a parameter to ARRAY_CONTAINS function using SQL API
我的 Cosmos DB SQL 查询包括对 ARRAY_CONTAINS
函数的以下调用:
WHERE ARRAY_CONTAINS(@targetActions, {'aid': c.id, 'at': atil.actionType }, true)
我需要使用以下 JSON 数组作为 @targetActions
参数:
[
{
"aid": "vdb-rc-vote-16375",
"at": "cast-rc-vote"
},
{
"aid": "vdb-rc-vote-16312",
"at": "cast-rc-vote"
},
{
"aid": "vdb-rc-vote-16692",
"at": "cast-rc-vote"
}
]
我使用以下代码在我的查询定义中设置参数:
myQueryDefinition.WithParameter("@targetActions", targetActions);
我尝试了以下 targetActions
值
JArray
string
IEnumerable<TargetActionType>
其中 TargetActionType
是一个 .NET class,具有与 JSON 对象。
我的查询没有 return 上述任何一项的预期结果。但是,如果我按如下方式在查询中硬编码 JSON,它就可以正常工作:
WHERE ARRAY_CONTAINS(
[
{
"aid": "vdb-rc-vote-16375",
"at": "cast-rc-vote"
},
{
"aid": "vdb-rc-vote-16312",
"at": "cast-rc-vote"
},
{
"aid": "vdb-rc-vote-16692",
"at": "cast-rc-vote"
}
]
, {'aid': c.id, 'at': atil.actionType }, true)
根据我的测试,JArray
可以,你可以再试一次。
下面是我的测试代码:
string sqlQueryText = "SELECT * FROM c WHERE ARRAY_CONTAINS(@targetActions, {'aid': c.id, 'at': c.at }, true)";
JObject jo1 = new JObject { { "aid", "vdb-rc-vote-16375" },{ "at", "cast-rc-vote" } };
JObject jo2 = new JObject { { "aid", "vdb-rc-vote-16312" }, { "at", "cast-rc-vote" } };
JObject jo3 = new JObject { { "aid", "vdb-rc-vote-16692" }, { "at", "cast-rc-vote" } };
JArray targetActions = new JArray();
targetActions.Add(jo1);
targetActions.Add(jo2);
targetActions.Add(jo3);
QueryDefinition queryDefinition = new QueryDefinition(sqlQueryText).WithParameter("@targetActions", targetActions);
FeedIterator queryResultSetIterator = this.container.GetItemQueryStreamIterator(queryDefinition);
while (queryResultSetIterator.HasMoreResults)
{
using (ResponseMessage response = await queryResultSetIterator.ReadNextAsync())
{
StreamReader streamReader = new StreamReader(response.Content);
string responseContentAsString = await streamReader.ReadToEndAsync();
Console.WriteLine(responseContentAsString);
}
}
这是结果:
{"_rid":"R-5RALZpDGQ=","Documents":[{"id":"vdb-rc-vote-16375","at":"cast-rc-vote"}],"_count":1}
这是我的cosmos db文档:
{
"id": "vdb-rc-vote-16375",
"at": "cast-rc-vote"
}
希望对您有所帮助:).
我的 Cosmos DB SQL 查询包括对 ARRAY_CONTAINS
函数的以下调用:
WHERE ARRAY_CONTAINS(@targetActions, {'aid': c.id, 'at': atil.actionType }, true)
我需要使用以下 JSON 数组作为 @targetActions
参数:
[
{
"aid": "vdb-rc-vote-16375",
"at": "cast-rc-vote"
},
{
"aid": "vdb-rc-vote-16312",
"at": "cast-rc-vote"
},
{
"aid": "vdb-rc-vote-16692",
"at": "cast-rc-vote"
}
]
我使用以下代码在我的查询定义中设置参数:
myQueryDefinition.WithParameter("@targetActions", targetActions);
我尝试了以下 targetActions
值
JArray
string
IEnumerable<TargetActionType>
其中TargetActionType
是一个 .NET class,具有与 JSON 对象。
我的查询没有 return 上述任何一项的预期结果。但是,如果我按如下方式在查询中硬编码 JSON,它就可以正常工作:
WHERE ARRAY_CONTAINS(
[
{
"aid": "vdb-rc-vote-16375",
"at": "cast-rc-vote"
},
{
"aid": "vdb-rc-vote-16312",
"at": "cast-rc-vote"
},
{
"aid": "vdb-rc-vote-16692",
"at": "cast-rc-vote"
}
]
, {'aid': c.id, 'at': atil.actionType }, true)
根据我的测试,JArray
可以,你可以再试一次。
下面是我的测试代码:
string sqlQueryText = "SELECT * FROM c WHERE ARRAY_CONTAINS(@targetActions, {'aid': c.id, 'at': c.at }, true)";
JObject jo1 = new JObject { { "aid", "vdb-rc-vote-16375" },{ "at", "cast-rc-vote" } };
JObject jo2 = new JObject { { "aid", "vdb-rc-vote-16312" }, { "at", "cast-rc-vote" } };
JObject jo3 = new JObject { { "aid", "vdb-rc-vote-16692" }, { "at", "cast-rc-vote" } };
JArray targetActions = new JArray();
targetActions.Add(jo1);
targetActions.Add(jo2);
targetActions.Add(jo3);
QueryDefinition queryDefinition = new QueryDefinition(sqlQueryText).WithParameter("@targetActions", targetActions);
FeedIterator queryResultSetIterator = this.container.GetItemQueryStreamIterator(queryDefinition);
while (queryResultSetIterator.HasMoreResults)
{
using (ResponseMessage response = await queryResultSetIterator.ReadNextAsync())
{
StreamReader streamReader = new StreamReader(response.Content);
string responseContentAsString = await streamReader.ReadToEndAsync();
Console.WriteLine(responseContentAsString);
}
}
这是结果:
{"_rid":"R-5RALZpDGQ=","Documents":[{"id":"vdb-rc-vote-16375","at":"cast-rc-vote"}],"_count":1}
这是我的cosmos db文档:
{
"id": "vdb-rc-vote-16375",
"at": "cast-rc-vote"
}
希望对您有所帮助:).