如何在Raven DB中查询嵌套集合中的项目?

时间:2011-08-02 15:51:59

标签: ravendb

我有以下2个实体模型:

      public class Store : IModel
      {
        public string Id { get; set; }
        public string Name { get; set; }
        public string MainPageUrl { get; set; }
        public ICollection<Product> Products { get; set; }

      }

      public class Product : IModel {
          public string Id { get; set; }
          public string Name { get; set; }
          public double Price { get; set; }
        public DateTime Created { get; set; }
}

这些商店是我的Raven Db中的文件。 我需要创建一个索引,我可以通过Name查询产品,结果应该是只包含匹配产品的部分商店文档。

所以具体来说我需要问Raven Db:哪些商店有包含此文本的产品,以及每个商店中的产品是什么。

现在,我可以创建一个索引,为我提供包含匹配产品的商店文档,但它始终为我提供 ALL 这些文档中的产品。

我认为这是一个非常容易回答的问题,但对Raven Db和文档数据库来说是新手,我无法做到这一点。

这里已经有了几乎重复的question,但我仍然无法使查询/索引工作。

1 个答案:

答案 0 :(得分:6)

骡, 这是预期的,模型中的商店文档包含其所有产品,如果您要求商店文档,您将获得完整商店文档。 如果您只想获得所需内容的投影,可以使用以下索引:

from store in docs.Stores
from product in store.Products
select new { product.Name, product.Price, product.Created, store.Id }

标记名称,价格,已创建和已存储的ID。

然后发出以下查询。

session.Query<StoreProduct>()
  .Where(s=>s.Name == name)
  .AsProjection<StoreProduct>()
  .ToList();

这只会给你匹配的产品。

相关问题