1

在 RavenDB 中

我需要根据文档的 ID 获取文档的最新插入,并按列表中的 ID 过滤

IE:

List<Entity> GetLastByIds(List<int> ids);

实体类似于:

class Entity
{
int id; //Unique identifier for the category the price applies to.
int Price; //Changes with time
DateTime Timestamp; //DateTime.UtcNow
}

所以如果我插入以下内容:

session.Store(new Entity{Id = 1, Price = 12.5});
session.Store(new Entity{Id = 1, Price = 7.2});
session.Store(new Entity{Id = 1, Price = 10.3});
session.Store(new Entity{Id = 2, Price = 50});
session.Store(new Entity{Id = 3, Price = 34});
...

如何获得 ID 1 和 3 的最新价格?

我的 Map/Reduce 工作正常,为我提供了每个 ID 的最新信息,这是我正在努力解决的过滤问题。我想在 Raven 中进行过滤,因为如果所有 ID 总共有超过 1024 个价格点,那么在客户端进行过滤是没有用的。

非常感谢我能得到的任何帮助。

非常感谢你:)

4

1 回答 1

5

如果Id应该代表类别,那么您应该调用它CategoryId。通过调用 property Id,您正在接受 Raven 的约定,即它应该被视为该文档的主键。您不能保存同一文档的多个版本。它只会覆盖最后一个版本。

假设您已正确构建索引,您只需像这样查询它:

using Raven.Client.Linq;

...

var categoryIds = new[] {1, 3};  // whatever
var results = session.Query<Entity, YourIndex>()
                     .Where(x=> x.CategoryId.In(categoryIds));

.In扩展方法在Raven.Client.Linq命名空间中。)

于 2013-11-02T21:25:42.597 回答