我想知道是否有一种方法可以在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;
}
答案 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)
这就是我要怎么做。
使用
获取集合中文档的总数
dc.CreateDocumentQuery(update.SelfLink, "SELECT c.id FROM c")
使用Random
在0和从上面获得的总数(负1)之间选择随机的int
。
在索引(步骤2)中获取与在步骤1中获得的id
相对应的文档
我还没有尝试过,但是让我知道!