随机选择文件

时间:2018-12-26 15:11:38

标签: c# azure azure-cosmosdb

我想知道是否有一种方法可以在CosmosDB(Microsoft Azure)中随机选择文档。

这是我的代码,我不知道在“ Take(20)”之前要添加什么:

public List<LeafBook> BooksList { get; private set; }

public async Task<List<LeafBook>> GetBookAsync()
{
    try
    {
        // The query excludes completed TodoItems

        var query = client.CreateDocumentQuery<LeafBook>(collectionLink, new FeedOptions { MaxItemCount = -1 })

             .Take(20)            
             .AsDocumentQuery();

        BooksList = new List<LeafBook>();
        while (query.HasMoreResults)
        {
            BooksList.AddRange(await query.ExecuteNextAsync<LeafBook>());
        }

    }
    catch (Exception e)
    {
        Console.Error.WriteLine(@"ERROR {0}", e.Message);
        return null;
    }
    return BooksList;
}

2 个答案:

答案 0 :(得分:0)

kikis,正如@David Makogon在评论中说的那样,您可以遵循sample所链接的feedback,以在cosmos db mongo api中获得随机结果。

但是,cosmos db sql api中没有这样的本机功能。因此,也许您需要采用解决方法。

您可以使用stored procedure在cosmos db中实现此功能,请参考此blog

在此替代方法中,最重要的是,它可能会遍历整个集合,具体取决于执行时传递给sproc的filterString的值。您应该确保filterString在数据库上尽可能轻巧。

或者您可以在查询之前获得20个随机NumberoftheBook属性,并将其用于查询过滤器。

答案 1 :(得分:0)

这就是我要怎么做。

  1. 使用
    获取集合中文档的总数 dc.CreateDocumentQuery(update.SelfLink, "SELECT c.id FROM c")

  2. 使用Random在0和从上面获得的总数(负1)之间选择随机的int

  3. 在索引(步骤2)中获取与在步骤1中获得的id相对应的文档

我还没有尝试过,但是让我知道!