## Module `store` Ce module permet de stocker et récupérer des données structurées ("documents") sur le serveur. ### `store.upsert(ctx, collection, doc)` Enregistre un document dans une collection. Si le document a une propriété `_id` celle ci est utilisée comme identifiant. Dans le cas contraire elle sera autogénérée par le moteur de stockage. #### Arguments - `ctx` **context** Le contexte d'exécution. Voir la documentation du module [`context`](./context.md) - `collection` **string** Nom de la collection dans laquelle retrouver le document - `doc` **object** Le document à enregistrer #### Valeur de retour Le document dans sa forme après enregistrement. #### Usage ```js var ctx = context.get(); var obj = store.upsert(ctx, "myCollection", {"foo": "bar"}); ``` ### `store.get(ctx, collection, docId)` Retourne le document associé à l'identifiant `docId` ou `null` si celui ci n'est pas trouvé. #### Arguments - `ctx` **context** Le contexte d'exécution. Voir la documentation du module [`context`](./context.md) - `collection` **string** Nom de la collection dans laquelle retrouver le document - `docId` **string** Identifiant du document à récupérer #### Valeur de retour le document stocké si il existe, `null` sinon. #### Usage ```js function onInit() { var ctx = context.get(); var obj = store.get(ctx, "myCollection", "doc-id"); } ``` ### `store.delete(ctx, collection, docId)` Supprime le document associé à l'identifiant dans la collection. #### Arguments - `ctx` **context** Le contexte d'exécution. Voir la documentation du module [`context`](./context.md) - `collection` **string** Nom de la collection dans laquelle retrouver le document - `docId` **string** Identifiant de le document à supprime #### Valeur de retour Aucune #### Usage ```js var ctx = context.get(); store.delete(ctx, "myCollection", "my-item-id"); ``` ### `store.query(ctx, collection, doc, filter?, options?)` Filtre la collection et récupère les documents associés à la requête. #### Arguments - `ctx` **context** Le contexte d'exécution. Voir la documentation du module [`context`](./context.md) - `collection` **string** Nom de la collection dans laquelle retrouver le document - `filter` **object** Filtre à appliquer à la collection, voir "Filtres". - `options` **object** Options de filtrage, voir "Options". ##### Filtres Un filtre se construit à partir d'une hiérarchie d'opérateurs sous la forme d'un document. On distingue deux types d'opérateurs: - Les opérateurs de combinaison logique; - Les opérateurs de filtrage. Les opérateurs d'combinaison logique prennent la forme suivante: ``` { "": [ , , etc ] } ``` **Exemple** ```json { "and": [ { "eq": { "myAttr1": "foo" } }, { "neq": { "myAttr2": "bar" } } ] } ``` Ce filtre serait traduit en syntaxe SQL en `myAttr1 = "foo" AND myAttr2 != "bar"`. Voici la liste des opérateurs de combinaison logique: - `and` - "ET" logique - `or` - "OU" logique - `not` - Négation logique Les opérateurs de filtrage prennent la forme suivantes: ``` { : { "key1": "val1", "key2": "val2", "key3": "val3", etc } } ``` **Exemple** ```json { "gt": { "foo": "bar" } }, ``` Voici la liste des opérateurs de filtrage: - `eq` - Comparaison `==` - `neq` - Comparaison `!=` - `gt` - Comparaison `>` - `gte` - Comparaison `>=` - `lt` - Comparaison `<` - `lte` - Comparaison `<=` - `like` - Comparaison type `LIKE` MySQL/SQLite - `in` - Comparaison type `IN` MySQL/SQLite ##### Options #### Valeur de retour Tableau d'documents correspondant au filtre. #### Usage ```js var ctx = context.get(); var results = store.query(ctx, "myCollection", { eq: { "foo": "bar", } }, { limit: 10, offset: 5, orderBy: "foo", orderDirection: "asc", }); ```