MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Les noms de champ FieldPath ne doivent pas contenir de '.' lorsque vous essayez d'utiliser AGGREGATE

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