sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo encontrar objetos anidados específicos sin conocer la clave principal en mongodb

Puede utilizar $objectToArray (mongoDB 3.4.4 y superior), $filter y $project y obtener algo como esto:

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"
      }
    }
  },
])

Puedes verlo funcionando aquí

La idea es dividir el objeto en una matriz, filtrarlo y luego convertir esa matriz nuevamente en un objeto.

Filtré por city pero estoy seguro de que entiendes la idea.