MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Obtenir un tableau entier par l'une de ses chaînes. Le tableau est à l'intérieur d'un autre tableau. Mongodb/Javascript

Utilisation de la requête d'agrégation :

  • $match condition, mettre imbriqué $ememMatch pour condition à 2 niveaux
  • $reduce pour parcourir la boucle du tableau vid, définissez le [] initial, vérifiez la condition si la chaîne est dans le tableau actuel, puis retournez le tableau actuel, sinon retournez la valeur initiale
let searchString = "adfsdfasfd";
db.collection.aggregate([
  {
    $match: {
      vid: { $elemMatch: { $elemMatch: { $in: [searchString] } } }
    }
  },
  {
    $addFields: {
      vid: {
        $reduce: {
          input: "$vid",
          initialValue: [],
          in: {
            $cond: [{ $in: [searchString, "$$this"] }, "$$this", "$$value"]
          }
        }
      }
    }
  }
])

Aire de jeux

Résultat :

[
  {
    "vid": [
      "adfsdfasfd",
      "this is some sample text",
      "https://example.com"
    ]
  }
]

Utilisation de la requête de recherche :

  • Mettez la condition de correspondance comme ci-dessus
  • pour la projection, obtenir le résultat de la correspondance mais dans le même tableau imbriqué
let searchString = "adfsdfasfd";
db.collection.find(
  { vid: { $elemMatch: { $elemMatch: { $in: [searchString] } } } }
).project({ "vid.$": 1, _id: 0 }).toArray()

Aire de jeux

Résultat :

[
  {
    "vid": [
      [
        "adfsdfasfd",
        "this is some sample text",
        "https://example.com"
      ]
    ]
  }
]