如何使用 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

我的查询没有 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"
}

希望对您有所帮助:).