MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment trouver des objets imbriqués spécifiques sans connaître la clé parent dans mongodb

Vous pouvez utiliser le $objectToArray (mongoDB 3.4.4 et versions ultérieures), $filter et $project et obtenez quelque chose comme ceci :

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

Vous pouvez le voir fonctionner ici

L'idée est de décomposer l'objet en tableau, de le filtrer, puis de reconvertir ce tableau en objet.

J'ai filtré sur city mais je suis sûr que vous avez compris.