Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Recuperar documento com tamanho de array > 2 - MongoDB

Olá pessoal, tudo bem?

Peço ajuda para desenvolver uma query no mongoDB que:

  • calcule o tamanho de elementos do array 'host':
  • retorne apenas os documentos que possuem array (host) > que 2 elementos AND status = false,
  • retorne TODOS os objetos com TODOS os campos que possuem os parametros acima.
exemplo do objeto:

{
    "_id" : ObjectId("XXXXXXXXX"),
    "content" : "ASdkJAHKDA",
    "time" : ISODate("2020-01-24T17:20:00.023Z"),
    "sentEmail" : {
        "host" : [ 
            "smtp.XXX", 
            "smtp.YYYY", 
        ],
        "status" : false,
        "date" : ISODate("2020-01-27T14:36:08.311Z",
}

tentativas:
- db.getCollection('emails').find({'sentEmail.status': false}, {$where:'sentEmail.host >= 2'})
Problema: Não retorna todos os campos do objeto, apenas o ID

- db.getCollection('emails').find({'sentEmail.host.1': {$exists:true}, 'sentEmail.status': false})
Problema: Retorna apenas o primeiro objeto encontrado. 
1 resposta
solução!

Olá pessoal.

Consegui resolver a parada aqui com a query abaixo:

find({ $expr: { $and: [{ $eq: ['$sentEmail.status', false] }, { $gte: [{ $size: '$sentEmail.host' }, 2] }] } })

Isso retorna os objetos/documentos que são status = FALSE e a qtd de elementos do array host >= 2;