MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So finden Sie bestimmte verschachtelte Objekte, ohne den übergeordneten Schlüssel in mongodb zu kennen

Sie können $objectToArray verwenden (mongoDB 3.4.4 und höher), $filter und $project und so etwas bekommen:

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

Sie können sehen, wie es hier funktioniert

Die Idee ist, das Objekt in ein Array zu zerlegen, es zu filtern und dieses Array dann wieder in ein Objekt umzuwandeln.

Ich habe nach city gefiltert aber ich bin sicher, Sie verstehen es.