将DocumentDB MaxItemCount与自定义select语句组合在一起

时间:2015-08-10 06:00:39

标签: azure azure-cosmosdb

我正在尝试组合自定义选择语句(在DocumentDB中)并使MaxItemCount同时工作。

我正在尝试做的一个例子是:

 var itemList= DocClient.CreateDocumentQuery<MyEntity>(
                     collection.SelfLink, 
                     new FeedOptions { MaxItemCount = 5 })
                     .Select(m =>
                                    new {
                                        MyProperty1 = m.Property1,
                                        MyProperty2 = m.Property2
                                    });

在上面的例子中,MyEntity可能有几个属性,但我只想返回前两个属性(并节省执行持续时间/流量等)。

这很好用,但MaxItemCount被忽略了。无论我放在那里,我都会收回整个系列。

现在,如果我将查询修改为:

IDocumentQuery<MessageEntity> query =             
                        DocClient.CreateDocumentQuery<MessageEntity>               
                        (collection.SelfLink, new FeedOptions{MaxItemCount=5}).AsDocumentQuery();


var myTask = query.ExecuteNextAsync<MessageEntity>();

现在,在第二种情况下,遵循MaxItemCount(我只得到5)但我似乎没有自定义Select语句来限制返回哪些属性。

我错过了一些明显的东西,或者这是一个已知的限制?

由于

1 个答案:

答案 0 :(得分:0)

该查询生成一个IQueryable对象,您通常使用ToEnumerable()来获取可以使用ToList或ToArray或类似内容枚举的内容。

这将继续在MaxItemCount块中获取结果,直到没有更多结果(continuation == String.Empty)

如果您不想这样做,并控制分页,则使用AsDocumentQuery()扩展名,并按照您的指示使用ExexcuteNextAsync()手动获取每个页面。

所以,你可以这样做;

        var q = client.CreateDocumentQuery<Family>(collectionLink, new FeedOptions { MaxItemCount = 5 })
                   .Where(f => f.Id == "AndersenFamily" || f.Address.City == "NY")
                   .Select(f => new { Name = f.LastName, City = f.Address.City })
                   .AsDocumentQuery();

然后继续使用query.ExecuteNextAsync()来获取您正在执行的每个页面。