174 lines
3.8 KiB
Markdown
174 lines
3.8 KiB
Markdown
## 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:
|
|
|
|
```
|
|
{
|
|
"<comb_op>": [
|
|
<filter_op>,
|
|
<filter_op>,
|
|
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:
|
|
|
|
```
|
|
{
|
|
<filter_op>: {
|
|
"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",
|
|
});
|
|
```
|