Я изучаю RavendDb, используя его в проекте и пытаюсь что-то делать. У меня нет опыта работы с SQL / реляционными базами данных, поэтому мне легче использовать сокращение карты и базы данных документов.
Я пытаюсь создать один статический индекс для создания объекта, содержащего счетчик появления 4 полей условий, вместо создания 4 статических индексов и объединения результатов после 4 запросов к базе данных.
Вот статический индекс:
public class Client_ProductDeploymentSummary : AbstractIndexCreationTask<Product, ClientProductDeploymentResult>
{
public Client_ProductDeploymentSummary()
{
Map = products =>
from product in products
select new {
product.ClientName,
NumberProducts = 1,
NumberProductsWithCondition = 0,
NumberProductsWithoutCondition = 0,
NumberProductsConditionTestInconclusive = 0
};
Map = products =>
from product in products
where product.TestResults.Condition == true
select new
{
product.ClientName,
NumberProducts = 0,
NumberProductsWithCondition = 1,
NumberProductsWithoutCondition = 0,
NumberProductsConditionTestInconclusive = 0
};
Map = products =>
from product in products
where product.TestResults.Condition == false
select new
{
product.ClientName,
NumberProducts = 0,
NumberProductsWithCondition = 0,
NumberProductsWithoutCondition = 1,
NumberProductsConditionTestInconclusive = 0
};
Map = products =>
from product in products
where product.TestResults.Condition == null
select new
{
product.ClientName,
NumberProducts = 0,
NumberProductsWithCondition = 0,
NumberProductsWithoutCondition = 0,
NumberProductsConditionTestInconclusive = 1
};
Reduce = results =>
from result in results
group result by result.ClientName
into g
select new ClientProductDeploymentResult()
{
ClientName = g.Key,
NumberProducts = g.Sum(x => x.NumberProducts),
NumberProductsWithCondition = g.Sum(x => x.NumberProductsWithCondition),
NumberProductsWithoutCondition = g.Sum(x => x.NumberProductsWithoutCondition),
NumberProductsConditionTestInconclusive = g.Sum(x => x.NumberProductsConditionTestInconclusive)
};
}
}
Я добавил 4 переменные к каждому оператору select new, чтобы индекс компилировался и развертывался в моем модульном тесте. Кажется, я не могу использовать функцию AddMap (...), как я видел в некоторых примерах (я понимаю, что просто перезаписываю переменную Map). Клиентов не так много, среди десятков или сотен, но, возможно, много Продуктов, определенно по 1000 на одного клиента.
Есть ли краткий способ составить цель этого индекса? Или можно уменьшить на одну карту для каждого поля и объединить результаты в коде вызывающего абонента?