Как запросить элементы из вложенных коллекций в Raven DB? - PullRequest
5 голосов
/ 02 августа 2011

У меня есть следующие 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. Мне нужно создать индекс, в котором я могу запрашивать товары по Имени, и результат должен быть частичным. Хранить документы, содержащие только совпадающие товары.

Итак, чтобы быть конкретным, я должен спросить Raven Db: «В каких магазинах есть товары, содержащие этот текст, и что это за товары в каждом магазине».

Теперь я могу создать индекс, который дает мне документы Store с соответствующими продуктами, но всегда дает мне ALL продуктов в этих документах.

Полагаю, ответить на этот вопрос действительно легко, но, будучи новичком в Raven Db и базах данных документов, я просто не смог сделать эту работу.

Здесь уже есть почти дубликат вопроса , но я все еще не мог заставить запрос / индекс работать.

1 Ответ

6 голосов
/ 03 августа 2011

Mule, Предполагается, что в вашей модели «Документ магазина» содержатся все ее продукты, и если вы запрашиваете документ магазина, вы получите полный Документ магазина. Если вы хотите получить обратно прогноз только для тех вещей, которые вам нужны, вы можете использовать следующий индекс:

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

Пометить имя, цену, созданный и идентификатор как сохраненные.

Затем выполните следующий запрос.

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

Это даст вам только соответствующие продукты.

...