Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure cosmosdb 如何使用SQL API将对象的JSON数组作为参数传递给array_CONTAINS函数_Azure Cosmosdb_Azure Cosmosdb Sqlapi - Fatal编程技术网

Azure cosmosdb 如何使用SQL API将对象的JSON数组作为参数传递给array_CONTAINS函数

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

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-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
    是一个.NET类,具有与JSON对象中相同的属性(
    aid
    at
我的查询不会返回上述任何结果。但是,如果我在查询中硬编码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"
}

希望这能帮助您:)。

感谢您确认
JArray
是正确的选择。我对我的询问还有其他问题。解决该问题后,查询将使用
JArray
作为
.WithParameter
的参数类型。