如何从一组 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;
}
我想从我的 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;
}