使用 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 可能不是您要找的东西。