MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Os nomes de campo FieldPath não podem conter '.' ao tentar usar AGREGATE


Você pode usar a consulta abaixo

Se você estiver usando $expr então você pode facilmente usar o operador de agregação dentro dele. Então, em vez de usar .dot notação para encontrar o elemento, você pode usar $arrayElemAt operador que lhe dá a possibilidade de escolher o elemento que deseja.
db.table.aggregate([
  { '$match': {
    '$expr': {
      '$and': [
        { '$eq': [{ '$size': '$events' }, 4] },
        { '$lt': [{ '$arrayElemAt': ['$events.updated', 0] }, '2019-05-05'] }
      ]
    }
  }}
])

Ou do jeito que você estava tentando fazer
db.collection.aggregate([
  { "$match": {
    "events.0.updated": { "$lt": "2019-05-05" },
    "$expr": { "$eq": [{ "$size": "$events" }, 4] }
  }}
])

Você pode verificar o $expr comportamento aqui