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

Como encontrar objetos aninhados específicos sem conhecer a chave pai no mongodb


Você pode utilizar o $objectToArray (mongoDB 3.4.4 e superior), $filter e $project e obter algo assim:
db.collection.aggregate([
  {
    $project: {
      obj: {
        $objectToArray: "$info"
      }
    }
  },
  {
    $project: {
      _id: 0,
      obj: {
        $filter: {
          input: "$obj",
          as: "item",
          cond: {
            $eq: [
              "$$item.v.city",
              "NY"
            ]
          }
        }
      }
    }
  },
  {
    $project: {
      info: {
        $arrayToObject: "$obj"
      }
    }
  },
])

Você pode vê-lo trabalhando aqui

A ideia é quebrar o objeto em array, filtrá-lo e então converter esse array de volta em objeto.

Eu filtrei por city mas tenho certeza que você entendeu a ideia.