Шаблоны разработки и алгоритмы для применения правил к фактам

Если вы не хотите использовать aggregate, другое решение - использовать find, а затем сортировать результаты на стороне клиента с помощью array#sort :

Если значения $in являются примитивными типами, такими как числа, вы можете использовать такой подход, как:

var ids = [4, 2, 8, 1, 9, 3, 5, 6];
MyModel.find({ _id: { $in: ids } }).exec(function(err, docs) {
    docs.sort(function(a, b) {
        // Sort docs by the order of their _id values in ids.
        return ids.indexOf(a._id) - ids.indexOf(b._id);
    });
});

Если значения $in являются непримитивными типами, например ObjectId s, требуется другой подход поскольку indexOf сравнивается по ссылке в этом случае.

Если вы используете Node.js 4.x +, вы можете использовать Array#findIndex и ObjectID#equals , чтобы отрегулировать это, изменив функцию sort на:

docs.sort((a, b) => ids.findIndex(id => a._id.equals(id)) - 
                    ids.findIndex(id => b._id.equals(id)));

Или с любой версией Node.js, с подчеркиванием / lodash's findIndex :

docs.sort(function (a, b) {
    return _.findIndex(ids, function (id) { return a._id.equals(id); }) -
           _.findIndex(ids, function (id) { return b._id.equals(id); });
});

16
задан Bill 20 February 2009 в 22:22
поделиться

2 ответа

Существует хорошая статья Martin Fowler на Механизме Правил и где использовать их. Посмотрите, помогает ли

http://www.martinfowler.com/bliki/RulesEngine.html

5
ответ дан 30 November 2019 в 23:24
поделиться

Механизм правила очень подходит. Если механизм правила надежен, вписывается в остальную часть Вашей архитектуры/приложения и необходим для базовой функции Вашего приложения, затем идут для него.

, Если механизм правила является только небольшой частью Вас приложение или еще хуже: некоторый код, который не является тем же языком программирования, чем остальная часть Вас приложение... затем необходимо пересмотреть. Каждая часть приложения, которая является внешней из Вашего базового приложения (даже база данных является внешней к JAVA-приложению) является риском.

Затем существует две возможности: Программируйте простой механизм правила своим собственным или используйте Стратегию или Шаблон состояния.

2
ответ дан 30 November 2019 в 23:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: