Vous pouvez utiliser la requête ci-dessous
Si vous utilisez $expr
alors vous pouvez facilement utiliser l'opérateur d'agrégation à l'intérieur. Donc, au lieu d'utiliser .dot
notation pour trouver l'élément, vous pouvez utiliser $arrayElemAt
opérateur qui vous offre la possibilité de choisir l'élément que vous souhaitez.
db.table.aggregate([
{ '$match': {
'$expr': {
'$and': [
{ '$eq': [{ '$size': '$events' }, 4] },
{ '$lt': [{ '$arrayElemAt': ['$events.updated', 0] }, '2019-05-05'] }
]
}
}}
])
Ou la façon dont vous essayiez de faire
db.collection.aggregate([
{ "$match": {
"events.0.updated": { "$lt": "2019-05-05" },
"$expr": { "$eq": [{ "$size": "$events" }, 4] }
}}
])
Vous pouvez vérifier le $expr
comportement ici