sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man hämtar alla samlingsnycklar som innehåller ett visst (String) värde i mongodb

Du kan göra detta genom att omforma data i datakällan med objectToArray

Spela

db.collection.aggregate([
  {
    "$project": {
      "data": {
        "$objectToArray": "$$ROOT"
      }
    }
  },
  {
    $unwind: "$data"
  },
  {
    "$match": {
      "data.v": {
        $regex: "hello"
      }
    }
  }
])

En annan avancerad version här Det omformar tillbaka data

db.collection.aggregate([
  {
    "$project": {
      "data": {
        "$objectToArray": "$$ROOT"
      }
    }
  },
  {
    $unwind: "$data"
  },
  {
    "$match": {
      "data.v": {
        $regex: "hello"
      }
    }
  },
  {
    $group: {//Grouping back and restructuring the data so that objectToArray will bring the original format easily.
      "_id": "$_id",
      data: {
        "$addToSet": {
          k: "$data.k",
          v: "$data.v"
        }
      }
    }
  },
  {
    "$project": {
      "data": {
        "$arrayToObject": "$data"
      }
    }
  }
])

Se dokumentationen för arrayToObject och objectToArray , sedan $regex




  1. Mongodb fråga specifik månad|år inte datum

  2. Effektiv POJO-mappning till/från Java Mongo DBObject med Jackson

  3. Hur man kontrollerar den aktuella konfigurationen av MongoDB

  4. MongoDB:försöker läsa Long från JSON gör att java.lang.Integer inte kan castas till java.lang.Long