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:         Количество удалённых объектов