Mongodb: 4.0.13
У меня проблемы с пониманием и работой $ expr с массивами.
Давайте начнем и создадим новую коллекцию (dbRepeatElement) со следующим документом:
db.testRepeatElement.insert([
{
"data" : {
"FlsResSemires_2" : {
"Sospensione" : [
{
"DataInizio" : 1548806400000,
"DataFine" : 1549065600000,
"Motivazione" : "1"
}
]
}
},
"derived" : {
"DATAFINEANNORIFERIMENTO" : 1609372800000,
"regione190" : "190",
"REGAOEROG" : "190209820300",
"REGASLEROG" : "190209"
}
}
])
При большем агрегировании следующая часть не работает:
db.testRepeatElement.aggregate([
{
$match: {
$expr: {
$gt: ["$data.FlsResSemires_2.Sospensione.DataInizio", "$derived.DATAFINEANNORIFERIMENTO"]
}
}
}
])
Результат : вернуть совпадение (неверно! Просто проверьте даты)
Чтение документации mongodb, по-видимому, при использовании комбинации с массивами, агрегация и $ expr не возвращает ожидаемый результат, и вам нужно указать элемент массива, который вы хотите проверить, например:
db.testRepeatElement.aggregate([
{
$match: {
$expr: {
$gt: ["$data.FlsResSemires_2.0.Sospensione.DataInizio", "$derived.DATAFINEANNORIFERIMENTO"]
}
}
}
])
Результат : возвращать без совпадения (верно!)
Вопрос : мое требование - проверить каждый элемент в массиве, как это решить, без использования $ unwind ? Почему такой результат?