В настоящее время я работаю над драйвером Csharp LinQ для MongoDb, и у меня возникают проблемы с внедрением метода, подобного вызову хранимой функции на MongoDb. На самом деле, я знаю, что MongoDB не имеет механизма хранимой процедуры. И мне нужно, чтобы кто-то дал предложение или решение для этого. Важная вещь, которая каким-то образом будет передана в mongodb, не будет выполнена в памяти. Например, я хочу вернуть список с условием фильтрации, который реализуется пользовательским методом. Этот метод вычисляет базу на зависимостях полей.Функция вызова с использованием драйвера Mongodb-CSharp
Пример выполнен в памяти.
var list = collection.AsQueryable<Rule>().ToList();
var result = list.Where(x => x.Active && CalcMethod(x.Rule)> 5);
И пользовательский метод здесь.
public static int CalcMethod(Rule rule)
{
if(rule.Active)
// bypass check null
return rule.Weight.Unit * rule.Weight.Value;
else
// return something here
}
Метод CalcMethod как функция в SQL Server. Можем ли мы сделать это с помощью MongoDb или другого, ожидаем, что мы можем ввести метод для вычисления данных и фильтрации без выполнения в памяти. Каждая помощь будет оценена по достоинству.
Этот тип синтаксиса не очень хорошо работает с MongoDB. Если вы хотите, чтобы результаты вычислялись по полям, тогда посмотрите на [структуру агрегации] (http://docs.mongodb.org/manual/core/aggregation-introduction/). Это обрабатывает больше операций с полем, которые вы делаете с SQL, по сравнению с общей формой запроса «найти». –
Это хорошо, спасибо. Я придерживался повторно используемых методов, это сложные функции, которые не поддерживаются MongoDB, выше - это только базовый метод. Поскольку запросы создаются из пользовательского интерфейса, он будет выглядеть так, как запрос выражения Linq и система позволяют выполнять эти сложные вещи динамически. Использование структуры агрегации - это конвертер потребностей для их преобразования. Если вы знаете что-то подобное, дайте свой совет – cyworld8x