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

Sådan finder du specifikke indlejrede objekter uden at kende den overordnede nøgle i mongodb

Du kan bruge $objectToArray (mongoDB 3.4.4 og nyere), $filter og $project og få noget som dette:

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

Du kan se den virke her

Ideen er at bryde objektet til array, filtrere det og derefter konvertere det array tilbage til objekt.

Jeg filtrerede på city men jeg er sikker på, at du forstår ideen.




  1. Hvorfor vil min mongodb ikke oprette forbindelse til port 28017?

  2. Installation af Memcached på Debian 9

  3. Hvordan får man ReferenceField-data i mongoengine?

  4. Henter underdokumenter af geoNear - MongoDB