使用 ID 列表查询 CosmosDB 的建议方法是什么
What is the advised way to query CosmosDB using list of Ids
我的分区键曾经是一个值。现在它是一个用户列表。如何使用分区键列表?这是我的查询内容。
const string queryText = @"SELECT *
FROM c
WHERE ARRAY_CONTAINS(@Ids, c.UserID) = true
-- LastModified
AND DateTimeFromParts(StringToNumber(SUBSTRING(c.LastModified, 0, 4))
,StringToNumber(SUBSTRING(c.LastModified, 5, 2))
,StringToNumber(SUBSTRING(c.LastModified, 8, 2)))
-- Current Date/Time minus 60 days
>= DateTimeAdd('day', -60, GetCurrentDateTime())
ORDER BY c.LastModified DESC
";
var query = new QueryDefinition(queryText);
ids?.Add(LoggedInUser.Id);
query.WithParameter("@Ids", ids?.ToArray());
var returnList = new List<CosmosItemModel>();
var requestOptions = new QueryRequestOptions { PartitionKey = new PartitionKey(loggedInUserId) };
var feedIterator = Container.GetItemQueryIterator<CosmosItemModel>(queryDefinition, null, requestOptions);
while (feedIterator.HasMoreResults)
foreach (var item in await feedIterator.ReadNextAsync())
returnList.Add(item);
但是,当我将 LoggedInUser 用于 mu 分区键时,我只会从我的查询中获取该用户的文档,而不是用户列表。如何将我的 ID 列表用于分区键?
Microsoft 建议不要 querying across multiple partitions 如果您有大型容器,因为 RU 成本。
除此之外,您只需在查询中添加一个 OR
。
SELECT * FROM c WHERE c.partitionKey = @partitionA OR c.partitionKey = @partitionB
正如 David Makogon 指出的那样,ARRAY_CONTAINS
可能不是您要找的东西。
我的分区键曾经是一个值。现在它是一个用户列表。如何使用分区键列表?这是我的查询内容。
const string queryText = @"SELECT *
FROM c
WHERE ARRAY_CONTAINS(@Ids, c.UserID) = true
-- LastModified
AND DateTimeFromParts(StringToNumber(SUBSTRING(c.LastModified, 0, 4))
,StringToNumber(SUBSTRING(c.LastModified, 5, 2))
,StringToNumber(SUBSTRING(c.LastModified, 8, 2)))
-- Current Date/Time minus 60 days
>= DateTimeAdd('day', -60, GetCurrentDateTime())
ORDER BY c.LastModified DESC
";
var query = new QueryDefinition(queryText);
ids?.Add(LoggedInUser.Id);
query.WithParameter("@Ids", ids?.ToArray());
var returnList = new List<CosmosItemModel>();
var requestOptions = new QueryRequestOptions { PartitionKey = new PartitionKey(loggedInUserId) };
var feedIterator = Container.GetItemQueryIterator<CosmosItemModel>(queryDefinition, null, requestOptions);
while (feedIterator.HasMoreResults)
foreach (var item in await feedIterator.ReadNextAsync())
returnList.Add(item);
但是,当我将 LoggedInUser 用于 mu 分区键时,我只会从我的查询中获取该用户的文档,而不是用户列表。如何将我的 ID 列表用于分区键?
Microsoft 建议不要 querying across multiple partitions 如果您有大型容器,因为 RU 成本。
除此之外,您只需在查询中添加一个 OR
。
SELECT * FROM c WHERE c.partitionKey = @partitionA OR c.partitionKey = @partitionB
正如 David Makogon 指出的那样,ARRAY_CONTAINS
可能不是您要找的东西。