Odata $ top不适用于MongoDb

时间:2012-06-12 22:18:30

标签: odata mongodb-.net-driver

我遇到了一些奇怪的问题。这是代码 AccountsController.cs

// GET /api/accounts
[HttpGet]
[Queryable(ResultLimit = 50)]
public IQueryable<AccountDto> Get()
{
    return this.service.Get();
}

这里的服务 - 它是AccountService.cs

public IQueryable<AccountDto> Get()
{
    return this.readModel.Get();
}

和readModel的类型为AccountsReadModel

public IQueryable<AccountDto> Get()
{
    return Database.GetCollection<AccountDto>("Accounts").AsQueryable();
}

数据库是MongoDb.Driver.Database

问题如下: 当我尝试查询没有任何参数的Get方法时 - localhost/api/accounts - 它返回所有帐户(按预期) 当我使用skip:localhost/api/accounts?$skip=n时 - 它会跳过n并返回其余项目 (也是如此) 但是,localhost/api/accounts?$top=1会返回所有帐户,而不是一个帐户。

我该如何处理?

2 个答案:

答案 0 :(得分:1)

问题出在 [可查询(ResultLimit = 50)]:

它与$top=1一起产生以下表达式: coll.Take(1).Take(50)返回的不是1,而是50(或者集合中的所有元素,如果元素少于50则)。
顺便说一句,Database.GetCollection<A>("A").AsQueryable().Take(1).Take(50) - 不再返回1个元素 这看起来像MongoDbDriver中的错误

答案 1 :(得分:0)

$orderby

一起使用
localhost/api/accounts?$top=1&$orderby=...