Nodul LogoNodul
База данных

Использование баз данных из JS-кода

Из JavaScript-узла вы можете работать с базами данных, коллекциями и объектами.

Ниже приведены примеры кода с основными концепциями.

Работа с коллекциями

Все методы можно вызывать с помощью ORM: для создания js-объекта базы данных используйте 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-объект базы данных (Database)

- Method name:          collection(collection_name)
  Parameters:           collection_name - string
  Description:          Используется для получения js-объекта коллекции, который применяется для дальнейшей работы с объектами.
  Return value:         JS-объект коллекции
---
- Method name:          createCollection(collection_name)
  Parameters:           collection_name - string
  Description:          Создаёт новую коллекцию с заданным именем. Если коллекция уже существует, ошибка не возвращается.
  Return value:         JS-объект коллекции
---
- Method name:          listCollections()
  Parameters:
  Description:          Получает список коллекций для указанной базы данных.
  Return value:         Массив объектов:
                         [
                           {
                             "storage_id": "id",
                             "collection_name": "name"
                           }
                         ]

JS-объект коллекции (Collection)

- Method name:          get()
  Parameters:
  Description:          Запрашивает коллекцию из базы данных.
  Return value:         Пример коллекции:
                         {
                           "storage_id": "id",
                           "collection_name": "name"
                         }
---
- Method name:          updateCollectionName(new_collection_name)
  Parameters:           new_collection_name - string
  Description:          Обновляет имя коллекции.
  Return value:
---
- Method name:          truncate()
  Parameters:
  Description:          Удаляет все объекты в коллекции.
  Return value:
---
- Method name:          delete()
  Parameters:
  Description:          Удаляет коллекцию.
  Return value:
---
- Method name:          findObjects(limit, offset, filter = '')
  Parameters:           limit - int
                        offset - int
                        filter - string/object (опциональный параметр)
  Description:          Ищет объекты с фильтром или без него.
  Return value:         Массив объектов
---
- Method name:          getObjectByID(object_id)
  Parameters:           object_id - string
  Description:          Получает объект по его ID.
  Return value:         Объект
---
- Method name:          createObject(object)
  Parameters:           object - любой JS-тип данных
  Description:          Создаёт объект.
  Return value:         ID созданного объекта
---
- Method name:          updateObjects(filter, updater)
  Parameters:           filter - string/object
                        updater - string/object
  Description:          Обновляет объекты по фильтру.
  Return value:         Количество обновлённых объектов
---
- Method name:          deleteObject(object_id)
  Parameters:           object_id - string
  Description:          Удаляет объект по его ID.
  Return value:         Если объект существовал и был удалён - 1
                        Если объект не найден или уже удалён - 0
---
- Method name:          deleteObjectsByFilter(filter)
  Parameters:           filter - string/object
  Description:          Удаляет объекты по фильтру.
  Return value:         Количество удалённых объектов