Моего стек: Scala 2.11.6, 0.11.6 ReaciveMongo, Играть 2.4.2, 3.0.4 МонгоКак условно добавить новые счетчики в существующих SCALA Enumerator
У меня есть список запросов к Монго, которые Мне нужно выполнить условно один за другим (если количество результатов меньше MAX возможно).
В качестве решения я делаю следующее:
possibleQueries.
// find returns Enumerator[JsObject]
map(query => searchableCollection.find(query)).
// combine Enumerators with andThen
foldLeft(Enumerator.empty[JsObject])({ (e1, e2) => e1.andThen(e2) }) through
// Take only specified amount of suggestions
take[JsObject](MAX_AMOUNT)
- Объединить запросы с andThen состава
- Предельное количество результатов с Enumeratee.take [Int] (п).
Проблема с этим, что он жадно ищет данные с searchableCollection.find (запрос) (возможно я ошибаюсь), и не может даже выборки возвращаемых результатов, если предыдущий запрос возвращает MAX_AMOUNT результатов ,
Как переписать это, чтобы поиск вызывался только в том случае, если предыдущее перечисление не заполнило MAX_AMOUNT ответов?
UPDATE
Решение, которое я пошел с это
implicit class EnumeratorExtension[E](parent: Enumerator[E]) {
/**
* Create an Enumeratee that combines parent & e if parent was empty.
*/
def andIfEmpty(e: => Enumerator[E]): Enumerator[E] = new Enumerator[E] {
def apply[A](i: Iteratee[E, A]): Future[Iteratee[E, A]] = {
var empty = true
parent.
map(e => {
empty = false
e
})(defaultExecutionContext).
apply(i).
flatMap(r => {
if (empty)
e.apply(r)
else
Future.successful(r)
})(defaultExecutionContext)
}
}
}