如何从一组 ID 从 Cosmos Db 检索一组文档

How to retrieve a set of documents from Cosmos Db from a set of IDs

我想从我的 Cosmos Db 集合中检索项目,并且我有一个要检索的 ID 列表。所有代码都是 运行 在 Azure 函数中,下面是我在列表 filteredResult 中获取所有 ID 的代码,我在其中获取所有 ID 的列表。我正在寻找完成此代码的最佳方法,以一次考虑 30-40 个 ID 从我的 Cosmos Db 集合中检索所有项目。

 public static void Run([ServiceBusTrigger("testSB", "SubscriberName", Connection = "AzureServiceBusString")] string mySbMsg,
        [CosmosDB(
    databaseName: "DBName",
    collectionName: "CollectionName",
    ConnectionStringSetting = "CosmosDBConnection")] DocumentClient client,
        ILogger log)
    {
        
        try {
             log.LogInformation($"C# ServiceBus topic trigger function processed message: {mySbMsg}");


            
            var jsonSerializerSettings = new JsonSerializerSettings();
            jsonSerializerSettings.MissingMemberHandling = MissingMemberHandling.Ignore;
            List<MyItem> lists = JsonConvert.DeserializeObject<List<MyItem>>(mySbMsg, jsonSerializerSettings);
            List<string> filteredResult = (from s in lists
                                          where s.DocType == "TEST"
                                 select s.Id).ToList();

        }

此问题最近已在 Microsoft Q&A forum 中讨论。 再次在此处发布答案以扩大影响范围。

此代码可以在您创建 'filteredResult' 后使用(只需将 'input' 列表替换为 'filteredResult')

 List<string> input = new List<string>();
             input.Add("1");
             input.Add("2");
             input.Add("3");                
              var option = new FeedOptions { EnableCrossPartitionQuery = true };               
              IQueryable<Family> queryable = client.CreateDocumentQuery<Family>(UriFactory.CreateDocumentCollectionUri("families", "items").ToString(), "SELECT * FROM books where books.id IN " + "('" + string.Join( "','", input) + "')",option);
              List<Family> posts = queryable.ToList();
              Console.WriteLine("Read count = {0}", posts.Count);

另请注意,我为文档属性创建了一个模型 class,如下所示:

 public class Family
 {
     public int id;
     public string city;
 }