sql >> Database >  >> NoSQL >> MongoDB

Hoe alle sleutels van de verzameling te krijgen die een bepaalde (String) waarde bevatten in mongodb

U kunt dit doen door de gegevens in de gegevensbron opnieuw vorm te geven met behulp van objectToArray

Spelen

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

Een andere geavanceerde versie hier Het hervormt de gegevens terug

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

Raadpleeg de documentatie van arrayToObject en objectToArray , dan $regex




  1. MongoDB voorkeursschema voor ingesloten collecties. documenten versus arrays

  2. Voeg twee array-velden samen in mongoDB

  3. Document Lezen en invoegen met vergrendeling/transactie in nodejs met mongodb

  4. mongodb verbinding time-out fout