sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man hittar specifika kapslade objekt utan att känna till föräldranyckeln i mongodb

Du kan använda $objectToArray (mongoDB 3.4.4 och senare), $filter och $project och få något sånt här:

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 fungera här

Tanken är att bryta objektet till array, filtrera det och sedan konvertera arrayen tillbaka till objekt.

Jag filtrerade på city men jag är säker på att du förstår idén.




  1. Så här gör du:Skanna Salted Apache HBase-tabeller med regionspecifika nyckelområden i MapReduce

  2. PyMongo Uppdatera dokument med flera poster

  3. Vanliga MongoDB-intervjufrågor

  4. Få lista över alla databaser med Mongoose