Rechercher des fichiers avec une étiquette ou une valeur de champ spécifique

Cette page explique comment rechercher des fichiers auxquels un libellé ou une valeur de champ spécifique ont été appliqués.

Types de champs de libellé

Les champs de libellé Google Drive sont très typés, chacun étant compatible avec une indexation et une sémantique de recherche différentes. Le tableau suivant présente les types de données disponibles.

Type Options de type d'étiquette Opérateurs de recherche compatibles
Texte TextOptions is null, is not null, =, contains, starts with
Texte long LongTextOptions is null, is not null, contains
Entier IntegerOptions is null, is not null, =, !=, <, >, <=, >=
Date DateOptions is null, is not null, =, !=, <, >, <=, >=
Sélection SelectionOptions is null, is not null, =, !=
Utilisateur UserOptions is null, is not null, =, !=
Liste de sélection SelectionOptions (avec max_inputs > 1) is null, is not null, in, not in
Liste d'utilisateurs UserOptions (avec max_inputs > 1) is null, is not null, in, not in

1. Effectuer une recherche basée sur la présence d'un libellé ou d'un champ

Vous pouvez rechercher les éléments auxquels un libellé spécifique a été (ou n'a pas) été appliqué:

  • 'labels/contract' in labels
  • not 'labels/contract' in labels

Vous pouvez également rechercher des éléments pour lesquels un champ spécifique a (ou n'a pas) été défini:

  • labels/contract.comment IS NOT NULL
  • labels/contract.comment IS NULL

2. Recherche basée sur des champs à valeur unique

Vous pouvez rédiger des requêtes de recherche qui correspondent aux valeurs de champ attendues. Le tableau suivant présente les requêtes de champs valides:

Ce que vous souhaitez interroger Chaîne de requête
Éléments pour lesquels le commentaire est défini sur "hello" labels/contract.comment = 'hello'
Fichiers dont le commentaire commence par "hello" labels/contract.comment STARTS WITH 'hello'
Fichiers dans lesquels l'état est exécuté labels/contract.status = 'executed'
Fichiers dont l'état n'est pas exécuté labels/contract.status != 'executed'
Fichiers dont la date d'exécution est antérieure à une date spécifique labels/contract.execution_date < '2020-06-22'
Fichiers où "value_usd" (entier) est inférieur à une valeur spécifique labels/contract.value_usd < 2000
Fichiers où client_contact est défini sur une adresse e-mail spécifique labels/contract.client_contact = 'alex@altostrat.com'

3. Effectuez une recherche sur la base de champs comportant des champs à valeurs multiples (comme ListOptions.max_entries > 1).

Les champs qui acceptent plusieurs valeurs ne peuvent être interrogés qu'à l'aide de l'opérateur IN:

  • 'EMAIL_ADDRESS' IN labels/project.project_leads
  • NOT 'EMAIL_ADDRESS' IN labels/project.project_leads

Exemple

L'exemple de code suivant montre comment utiliser un ou plusieurs labelId pour répertorier tous les fichiers avec un libellé ou une valeur de champ spécifique à partir d'une ressource de fichier Drive. Il utilise également la méthode files.list. Le corps de la requête doit être vide.

Si vous souhaitez inclure labelInfo dans la réponse, vous devez également spécifier:

  • includeLabels sous forme de liste d'ID séparés par une virgule.

  • labelInfo dans le paramètre fields pour indiquer que vous souhaitez que labelInfo soit renvoyé dans includeLabels.

Si la requête aboutit, le corps de la réponse contient la liste des fichiers.

Java

List<File> fileList = driveService.files().list().setIncludeLabels("LABEL_1_ID,LABEL_2_ID").setFields("items(labelInfo, id)").setQ("'labels/LABEL_1_ID' in labels and 'labels/LABEL_2_ID' in labels").execute().getItems();

Python

file_list = drive_service.files().list(includeLabels="LABEL_1_ID,LABEL_2_ID", q="'labels/LABEL_1_ID' in labels and 'labels/LABEL_2_ID' in labels", fields="items(labelInfo, id)").execute();

Node.js

/**
* Search for Drive files with specific labels
* @return{obj} file list with labelInfo
**/
async function searchForFileWithLabels() {
  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app

  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  const auth = new GoogleAuth({scopes: 'https://www.googleapis.com/auth/drive'});
  const service = google.drive({version: 'v3', auth});
  try {
    const fileList = await service.files.list({
      includeLabels: 'LABEL_1_ID,LABEL_2_ID',
      q: '\'labels/LABEL_1_ID\' in labels and \'labels/LABEL_2_ID\' in labels',
      fields:'files(labelInfo, id)',
    });
    return file;
  } catch (err) {
    // TODO (developer) - Handle error
    throw err;
  }

Remplacez les éléments suivants :

  • LABEL_1_ID: premier(s) labelId d'un libellé à renvoyer.
  • LABEL_2_ID: deuxième labelId d'un libellé à renvoyer.