Azure cosmosdb 如何使用SQL API将对象的JSON数组作为参数传递给array_CONTAINS函数
My Cosmos DB SQL查询包括对Azure cosmosdb 如何使用SQL API将对象的JSON数组作为参数传递给array_CONTAINS函数,azure-cosmosdb,azure-cosmosdb-sqlapi,Azure Cosmosdb,Azure Cosmosdb Sqlapi,My Cosmos DB SQL查询包括对数组\u CONTAINS函数的以下调用: WHERE ARRAY_CONTAINS(@targetActions, {'aid': c.id, 'at': atil.actionType }, true) 我需要使用以下JSON数组作为@targetActions参数: [ { "aid": "vdb-rc-vote-16375", "at": "cast-rc
数组\u 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
是一个.NET类,具有与JSON对象中相同的属性(TargetActionType
和aid
)at
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"
}
希望这能帮助您:)。感谢您确认
JArray
是正确的选择。我对我的询问还有其他问题。解决该问题后,查询将使用JArray
作为.WithParameter
的参数类型。