MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come trovare oggetti nidificati specifici senza conoscere la chiave genitore in mongodb

Puoi utilizzare $objectToArray (mongoDB 3.4.4 e versioni successive), $filter e $project e ottieni qualcosa del genere:

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

Puoi vederlo lavorare qui

L'idea è di suddividere l'oggetto in array, filtrarlo e quindi riconvertire quell'array in oggetto.

Ho filtrato su city ma sono sicuro che hai capito.