15.3 Использование пользовательских баз данных из JS кода
Из кода JavaScript ноды можно работать с пользовательскими базами данных, коллекциями и объектами.
Ниже примеры кода с основными концепциями.
Работа с коллекциями
Все методы можно вызвать с помощью ORM: для создания js-объекта database используйте db.database('database_id')
и укажите конкретный ID вашей базы данных (его вы можете найти на странице “База данных” в левом меню).
export default async function run({execution_id, input, data, store, db}) {
const database_id = '4da687c4-2ba1-476f-9ff2-c5942aab2fbd'
const database = db.database(database_id)
}
Для доступа к методам управления коллекциями и объектами необходимо создать js-объект коллекции:
export default async function run({execution_id, input, data, store, db}) {
const database_id = '4da687c4-2ba1-476f-9ff2-c5942aab2fbd'
const database = db.database(database_id)
const collection = database.collection('collection_name')
}
Метод collection() не создаёт новую коллекцию. Если нужно создать новую коллекцию то можно вызвать метод await database.createCollection('collection_name')
. Если такая коллекция уже существует, то ошибка не возвращается.
Работа с объектами
Для создания объекта в коллекции используйте метод await collection.createObject()
. В качестве параметра вы можете передать строку, число, булевое значение, массив или js-объект любой вложенности. Метод возвращает строку с ID объекта:
export default async function run({execution_id, input, data, store, db}) {
const database_id = '4da687c4-2ba1-476f-9ff2-c5942aab2fbd'
const database = db.database(database_id)
const collection = database.collection('collection_name')
const object_id = await collection.createObject({
testField: {
field: "test"
}
})
return {
object_id
}
}
Для вывода списка объектов используйте метод await collection.findObjects(limit, offset, filter)
. Параметр limit задаёт количество строк для чтения в одном запросе, offset - сдвиг начала чтения (стандартные параметры как для пагинации). Параметр filter не обязателен, и может задаваться как строкой (YAML и JSON), так и js-объектом:
export default async function run({execution_id, input, data, store, db}) {
const database_id = '4da687c4-2ba1-476f-9ff2-c5942aab2fbd'
const database = db.database(database_id)
const collection = database.collection('collection_name')
const objects1 = await collection.findObjects(50, 0)
const filterStr = \`
conditions:
- operation: "equal"
query:
path: "example"
expected:
value: "example_js"
\`
const objects2 = await collection.findObjects(50, 0, filterStr)
const filterObj = {
conditions: [
{
operation: "equal",
query: {
path: "example"
},
expected: {
value: "example_js"
}
}
]
}
const objects3 = await collection.findObjects(50, 0, filterObj)
return {
objects1,
objects2,
objects3
}
}
Для обновления объектов используйте метод await collection.updateObjects(filter, updater)
. Параметр updater по аналогии с filter может быть как строкой (YAML и JSON), так и js-объектом. Мето д возвращает число - количество обновлённых объектов:
export default async function run({execution_id, input, data, store, db}) {
const database_id = '4da687c4-2ba1-476f-9ff2-c5942aab2fbd'
const database = db.database(database_id)
const collection = database.collection('collection_name')
const filterStr = \`
conditions:
- operation: "equal"
query:
path: "example"
expected:
value: "example_js"
\`
const updaterStr = \`
items:
- path: "example"
set:
value: "example_js_2"\`
\`
const count1 = await collection.updateObjects(filterStr, updaterStr)
const filterObj = {
conditions: [
{
operation: "equal",
query: {
path: "example"
},
expected: {
value: "example_js_2"
}
}
]
}
const updaterObj = {
items: [
{
path: "example",
set: {
value: "example_js_3"
}
}
]
}
const count2 = await collection.updateObjects(filterObj, updaterObj)
return {
count1,
count2
}
}
Таблица описание всех методов
JS-объект базы данных
- Название метода: collection(collection_name)
Параметры: collection_name - string
Описание: Используется для получения js-объекта коллекции, который используется для дальнейшей работы с объектами. Никакие вызовы к базе данных не происходят.
Возвращаемое значение: js-объект коллекции
---
- Назв ание метода: createCollection(collection_name)
Параметры: collection_name - string
Описание: Создаёт новую коллекцию с заданным именем. Если коллекция уже существует, то ошибка не возвращается.
Возвращаемое значение: js-объек т коллекции
---
- Название метода: listCollections()
Параметры:
Описание: Получение списка коллекций для указанной базы данных.
Возвращаемое значение: Массив объектов:
[
{
"storage_id": "id",
"collection_name": "name"
}
]
JS-объект коллекции
- Название метода: get()
Параметры:
Описание: Запрашивает коллекцию из базы данных.
Возвращаемое значение: Объект:
{
"storage_id": "id",
"collection_name": "name"
}
---
- Название метода: updateCollectionName(new_collection_name)
Параметры: new_collection_name - string
Описание: Обновляет имя коллекции.
Возвращаемое значение:
---
- Название метода: truncate()
Параметры:
Описание: Удаляет все объекты в коллекции.
Возвращаемое значение:
---
- Название метода: delete()
Параметры:
Описание: Удаляет коллекцию.
Возвращаемое значение:
---
- Название метода: findObjects(limit, offset, filter = '')
Параметры: limit - int
offset - int
filter - string/object (необязательный параметр)
Описание: Поиск объектов по фильтру или без него.
Возвращаемое значение: Массив объектов
---
- Название метода: getObjectByID(object_id)
Параметры: object_id - string
Описание: Получает объект по его ID.
Возвращаемое значение: Объект
---
- Название метода: createObject(object)
Параметры: object - любой тип данных JS
Описание: Создаёт объект.
Возвращаемое значение: ID созданного объекта
---
- Название метода: updateObjects(filter, updater)
Параметры: filter - string/object
updater - string/object
Описание: Обновляет объекты по фильтру.
Возвращаемое значение: Количество обновлённых объектов
---
- Название метода: deleteObject(object_id)
Параметры: object_id - string
Описание: Удаляет объект по его ID.
Возвращаемое значение: Если объект существовал и удалён - 1
Если объект не был найден или уже удалён - 0
---
- Название метода: deleteObjectsByFilter(filter)
Параметры: filter - string/object
Описание: Удаляет объекты по фильтру.
Возвращаемое значение: Количество удалённых объектов