В настоящее время я пытаюсь преобразовать этот код JS:
db.Issue.aggregate( [
{ // Filter out issues that have been worked on after our given week = All worklogs muste have been before date
$match : {
worklogs: { $all: [
{
"$elemMatch" : {
date: { $lte: endDate }
}
},
] }
}
}
] )
(На основании официальной документации: Использовать $ all с $ elemMatch
В код ODM Doctrineиспользуя их конструктор агрегации:
$builder = $this->createAggregationBuilder();
$aggregation = $builder
->match()
->field('worklogs')
->all([
$builder->matchExpr()->elemMatch(
$builder->expr()->field('date')->lte($week->getEndDate())
)
])
;
Однако, по-видимому, я не могу правильно сопоставить $all
, что означает, что я могу гарантировать, что все записи в коллекции выполненытребования, проверенные $elemMatch
.
Оригинальный запрос MongoDB в JS, кажется, делает свое дело, но мне не удается получить те же результаты в PHP. Сейчас я даже не уверен, что Doctrine может обработать эту комбинациюиз $all
и $elemMatch
.
ОБНОВЛЕНИЕ:
Спасибо всем за ваши комментарии! Однако я все еще борюсь с текущим синтаксисом запроса (в PHP!) для $not
/ ->not()
. Я уже проверил документы здесь: Doctrine ODM Docs , но не смог найти ничего полезного. (Обратите также внимание, что я использую версию 2.0 здесь).
Прямо сейчас мой запросвыглядит примерно так:
->match()
->field('worklogs')
->not([
$builder->matchExpr()->elemMatch(
$builder->matchExpr()->field('date')->gt($week->getEndDate())
)
])
Но приводит к этой ошибке:
1) App \ Tests \ Repository \ IssueRepositoryTest :: testGetEsvaluationsPerWeek MongoDB \ Driver \ Exception \ CommandException: $ не нужнорегулярное выражение или документ /var/www/html/vendor/mongodb/mongodb/src/Operation/Aggregate.php:263 /var/www/html/vendor/mongodb/mongodb/src/Collection.php:223 / var /www / html / vendor / doctrine / mongodb-odm / lib / Doctrine / ODM / MongoDB / Aggregation / Builder.php: 168 / var / www / html / vendor / doctrine / mongodb-odm / lib / Doctrine / ODM / MongoDB /Aggregation / Stage.php: 35 /var/www/html/src/Repository/IssueRepository.php:85