2 votes

Mongoose retourne tous les documents qui contiennent une valeur où qu'elle soit dans une propriété.

Disons que mes documents ressemblent à ceci :

  _id: "6285e9a7aff93ead37ec50ad",
  date: "2022-04-28T10:51:37.923Z",
  devices: {
    tablets: [
      {
        brand: "samsung",
        model: "s20"
      },
      {
        brand: "samsung",
        model: "s21"
      },
      {
        brand: "apple",
        model: "ipad_mini"
      },
    ],
    phones: [
      {
        brand: "samsung",
        model: "galaxy_s20"
      },
      {
        brand: "samsung",
        model: "galaxy_s20_lite"
      }
    ],
    laptops: []
  }
}

comment puis-je interroger et renvoyer tous les documents qui contiennent au moins un nom de domaine ? "apple" valeur dans "brand" propriété où que ce soit à l'intérieur de la "devices" propriété ?

2voto

Gops AB Points 4396

Lorsque vous avez plus de clés dynamiques, vous pouvez utiliser

db.collection.aggregate([
  {
    $project: {
      "d": {
        "$objectToArray": "$devices"
      }
    }
  },
  {
    "$match": {
      "d.v.brand": "apple"
    }
  }
])

Vous devez restructurer les données si nécessaire. Il retourne s'il y a au moins une correspondance.

terrain de jeux

db.collection.aggregate([
  {
    $project: {
      "d": {
        "$objectToArray": "$devices"
      }
    }
  },
  {
    "$match": {
      "d.v.brand": "apple"
    }
  },
  {
    "$project": {
      "devices": { //To reshape back
        "$arrayToObject": "$d"
      }
    }
  }
])

Terrain de jeux

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X