Recherche dans MongoDB en utilisant la valeur partielle d’un champ (field)

La syntaxe de recherche de MongoDB est assez simple. Donnons un nom à une collection userset trouvons tous les documents de la collection,

// Query
db.users.find({});

// Result
[
  {
    email: 'one@email.com',
    name: 'One for like and comment',
  },
  {
    name: 'Two for Comments',
  },
  {
    email: 'three@email.com',
    name: 'Three for Like',
  },
];

Si nous devons filtrer par un champ, alors,

// Query
db.users.find({ name: 'One for like and comment' });

// Result
[
  {
    email: 'one@email.com',
    name: 'One for like and comment',
  },
];

Que se passe-t-il si nous devons filtrer par champ mais que nous ne connaissons pas la casse exacte ou la valeur exacte. Voyons l’exemple

  • lister tous les documents qui ont un mot like dans le champ name

Filtrer le document à l’aide d’une expression régulière

Il peut être facilement réalisé en utilisant une expression régulière au lieu d’une valeur de chaîne,

// Query
db.users.find({ name: /like/ });

// Result
[
  {
    email: 'one@email.com',
    name: 'One for like and comment',
  },
];

Voici /like/ la regex qui trouvera tous les mots qui correspondent like. Mais cette requête est sensible à la casse. Cela ne correspondra pas Like. Mais il est très facile d’écrire une requête insensible à la casse,

db.users.find({ name: /like/i });

// Result
[
  {
    email: 'one@email.com',
    name: 'One for like and comment',
  },
  {
    email: 'three@email.com',
    name: 'Three for Like',
  },
];

L’ajout i à la fin de l’expression régulière indique une correspondance avec le mot quelle que soit la casse. (majuscule, minuscule, etc.).

Nous pouvons utiliser n’importe quelle recherche basée sur les expressions régulières pour filtrer les valeurs dans mongoDB.

Ref: https://learnwithparam.com/blog/case-insensitive-query-in-mongodb/