MongoDB
Эта страница переведена PageTurner AI (бета). Не одобрена официально проектом. Нашли ошибку? Сообщить о проблеме →
Поддержка MongoDB
TypeORM поддерживает базовую работу с MongoDB (драйвер Node.js v7 или новее).
Большая часть функциональности TypeORM ориентирована на РСУБД. На этой странице описаны все возможности, специфичные для MongoDB.
Установка
npm install mongodb
Параметры источника данных
-
appName- Имя приложения, создавшего экземпляр MongoClient. MongoDB записывает это значение в журнал сервера при установке соединения. Также фиксируется в журналах медленных запросов и коллекциях профилирования. -
authMechanism- Механизм аутентификации MongoDB. -
authSource- Указывает базу данных, связанную с учётными данными пользователя. -
autoEncryption- Опционально включает автоматическое шифрование данных при использовании. -
checkServerIdentity- Проверяет, выдан ли сертификатcertдляhostname. -
compressors- Массив или строка с разделителями-запятыми компрессоров для сжатия сетевого трафика между клиентом и mongod/mongos. -
connectTimeoutMS- Время ожидания подключения в миллисекундах до таймаута. По умолчанию:30000. -
database- Имя базы данных. -
directConnection- Разрешает драйверу принудительно использовать топологию Single для строки подключения с одним хостом. -
driver- Объект драйвера. По умолчаниюrequire("mongodb"). -
family- Семейство IP-адресов. -
forceServerObjectId- Принудительно генерировать _id на сервере вместо драйвера. По умолчанию:false. -
host- Хост базы данных. -
hostReplicaSet- Реплика-сет хоста базы данных. -
ignoreUndefined- Игнорировать поля со значением undefined при BSON-сериализации. По умолчанию:false. -
localThresholdMS- Размер окна задержки (в миллисекундах) для выбора подходящего экземпляра MongoDB среди нескольких доступных. -
maxStalenessSeconds- Максимальное отставание вторичной реплики в секундах перед исключением её из операций чтения. Минимум: 90 секунд. -
minPoolSize- Минимальное количество соединений в пуле подключений. -
monitorCommands- Включает мониторинг команд для этого клиента. -
noDelay- Отключает задержку Nagle для TCP-соединений. -
password- Пароль базы данных. -
pkFactory- Фабрика кастомных ключей _id. -
poolSize- Максимальное количество соединений в пуле подключений. Соответствует опцииmaxPoolSizeдрайвера MongoDB. -
port- Порт хоста базы данных. Порт MongoDB по умолчанию:27017. -
promoteBuffers- Конвертировать BSON Binary в нативные Node.js Buffer. По умолчанию:false. -
promoteLongs- Конвертировать Long-значения в number при 53-битной совместимости. По умолчанию:true. -
promoteValues- Конвертирует значения BSON в нативные типы, где возможно. При false возвращаются типы-обёртки. По умолчанию:true. -
proxyHost- Хост SOCKS5-прокси для TCP-подключений. -
proxyPassword- Пароль SOCKS5-прокси при аутентификации по логину/паролю. -
proxyPort- Порт SOCKS5-прокси для TCP-подключений. -
proxyUsername- Имя пользователя SOCKS5-прокси при аутентификации по логину/паролю. -
raw- Возвращать документы как сырые BSON-буферы. По умолчанию:false. -
readConcern- Уровень гарантий чтения (read concern) для коллекции. -
readPreference- Предпочитаемая стратегия чтения:ReadPreference.PRIMARYReadPreference.PRIMARY_PREFERREDReadPreference.SECONDARYReadPreference.SECONDARY_PREFERREDReadPreference.NEAREST
-
readPreferenceTags- Теги для read preference в формате строки "ключ:значение", разделённых запятыми. -
replicaSet- Имя набора реплик, если mongod является его участником. -
retryWrites- Включает повторные попытки записи. -
serializeFunctions- Сериализовывать функции в объектах. По умолчанию:false. -
socketTimeoutMS- Таймаут операций отправки/получения через сокет в миллисекундах. По умолчанию:360000. -
tls- Включает TLS/SSL для подключения. По умолчанию:false. -
tlsAllowInvalidCertificates- Отключает проверку сертификатов mongod/mongos. По умолчанию:false. -
tlsCAFile- Путь к локальному .pem-файлу с корневым цепочкой сертификатов центра сертификации. -
tlsCertificateKeyFile- Путь к локальному .pem-файлу с TLS/SSL-сертификатом и ключом клиента. -
tlsCertificateKeyFilePassword- Пароль для расшифровкиtlsCertificateKeyFile. -
url- URL подключения. Обратите внимание: другие параметры источника данных имеют приоритет над параметрами, заданными в URL. -
username- Имя пользователя базы данных. -
writeConcern- Уровень подтверждения записи (Write Concern), определяющий гарантии фиксации операций в MongoDB.
Дополнительные параметры можно добавить в объект extra, и они будут переданы напрямую в клиентскую библиотеку. Подробнее см. в документации mongodb по Параметрам подключения.
Определение сущностей и столбцов
Определение сущностей и столбцов почти идентично реляционным базам данных. Главное отличие — вместо @PrimaryColumn или @PrimaryGeneratedColumn необходимо использовать @ObjectIdColumn.
Пример простой сущности:
import { ObjectId } from "mongodb"
import { Entity, ObjectIdColumn, Column } from "typeorm"
@Entity()
export class User {
@ObjectIdColumn()
_id: ObjectId
@Column()
firstName: string
@Column()
lastName: string
}
Пример инициализации приложения:
import { DataSource } from "typeorm"
const myDataSource = new DataSource({
type: "mongodb",
host: "localhost",
port: 27017,
database: "test",
})
Определение вложенных документов (embedded documents)
Поскольку MongoDB хранит объекты внутри объектов (или документы внутри документов), в TypeORM можно делать аналогично:
import { ObjectId } from "mongodb"
import { Entity, ObjectIdColumn, Column } from "typeorm"
export class Profile {
@Column()
about: string
@Column()
education: string
@Column()
career: string
}
import { ObjectId } from "mongodb"
import { Entity, ObjectIdColumn, Column } from "typeorm"
export class Photo {
@Column()
url: string
@Column()
description: string
@Column()
size: number
constructor(url: string, description: string, size: number) {
this.url = url
this.description = description
this.size = size
}
}
import { Entity, ObjectId, ObjectIdColumn, Column } from "typeorm"
@Entity()
export class User {
@ObjectIdColumn()
id: ObjectId
@Column()
firstName: string
@Column()
lastName: string
@Column((type) => Profile)
profile: Profile
@Column((type) => Photo)
photos: Photo[]
}
При сохранении этой сущности:
const user = new User()
user.firstName = "Timber"
user.lastName = "Saw"
user.profile = new Profile()
user.profile.about = "About Trees and Me"
user.profile.education = "Tree School"
user.profile.career = "Lumberjack"
user.photos = [
new Photo("me-and-trees.jpg", "Me and Trees", 100),
new Photo("me-and-chakram.jpg", "Me and Chakram", 200),
]
await myDataSource.manager.save(user)
В базе данных сохранится следующий документ:
{
"firstName": "Timber",
"lastName": "Saw",
"profile": {
"about": "About Trees and Me",
"education": "Tree School",
"career": "Lumberjack"
},
"photos": [
{
"url": "me-and-trees.jpg",
"description": "Me and Trees",
"size": 100
},
{
"url": "me-and-chakram.jpg",
"description": "Me and Chakram",
"size": 200
}
]
}
Использование MongoEntityManager и MongoRepository
Доступно большинство методов EntityManager (кроме специфичных для РСУБД, таких как query и transaction). Например:
const timber = await myDataSource.manager.findOneBy(User, {
firstName: "Timber",
lastName: "Saw",
})
Для MongoDB также существует отдельный MongoEntityManager, расширяющий EntityManager.
const timber = await myDataSource.manager.findOneBy(User, {
firstName: "Timber",
lastName: "Saw",
})
Аналогично отдельному MongoEntityManager, существует MongoRepository с расширенным функционалом Repository:
const timber = await myDataSource.getMongoRepository(User).findOneBy({
firstName: "Timber",
lastName: "Saw",
})
Использование расширенных параметров в find():
Равно (Equal):
const timber = await myDataSource.getMongoRepository(User).find({
where: {
firstName: { $eq: "Timber" },
},
})
Меньше (LessThan):
const timber = await myDataSource.getMongoRepository(User).find({
where: {
age: { $lt: 60 },
},
})
В диапазоне (In):
const timber = await myDataSource.getMongoRepository(User).find({
where: {
firstName: { $in: ["Timber", "Zhang"] },
},
})
Вне диапазона (Not in):
const timber = await myDataSource.getMongoRepository(User).find({
where: {
firstName: { $not: { $in: ["Timber", "Zhang"] } },
},
})
Или (Or):
const timber = await myDataSource.getMongoRepository(User).find({
where: {
$or: [{ firstName: "Timber" }, { firstName: "Zhang" }],
},
})
Запросы к вложенным документам
const users = await myDataSource.getMongoRepository(User).find({
where: {
"profile.education": { $eq: "Tree School" },
},
})
Запросы к массиву вложенных документов
// Query users with photos of size less than 500
const users = await myDataSource.getMongoRepository(User).find({
where: {
"photos.size": { $lt: 500 },
},
})
MongoEntityManager и MongoRepository содержат множество полезных методов, специфичных для MongoDB:
createCursor
Создает курсор для запроса, который можно использовать для итерации по результатам из MongoDB.
createEntityCursor
Создает курсор для запроса, который можно использовать для итерации по результатам из MongoDB. Возвращает модифицированную версию курсора, преобразующую каждый результат в модели сущностей.
aggregate
Выполняет конвейер агрегации для коллекции.
bulkWrite
Выполняет операцию bulkWrite без использования fluent API.
count
Подсчитывает количество соответствующих запросу документов в базе данных.
countDocuments
Подсчитывает количество соответствующих запросу документов в базе данных.
createCollectionIndex
Создает индекс в базе данных для коллекции.
createCollectionIndexes
Создает несколько индексов в коллекции. Спецификации индексов определяются в createIndexes.
deleteMany
Удаляет несколько документов в MongoDB.
deleteOne
Удаляет один документ в MongoDB.
distinct
Команда distinct возвращает список уникальных значений для указанного ключа в коллекции.
dropCollectionIndex
Удаляет индекс из коллекции.
dropCollectionIndexes
Удаляет все индексы коллекции.
findOneAndDelete
Находит документ и удаляет его в одной атомарной операции, требует блокировки на запись на время выполнения.
findOneAndReplace
Находит документ и заменяет его в одной атомарной операции, требует блокировки на запись на время выполнения.
findOneAndUpdate
Находит документ и обновляет его в одной атомарной операции, требует блокировки на запись на время выполнения.
geoHaystackSearch
Выполняет геопоиск с использованием индекса geo haystack в коллекции.
geoNear
Выполняет команду geoNear для поиска элементов в коллекции.
group
Выполняет команду group для группировки данных в коллекции.
collectionIndexes
Возвращает все индексы коллекции.
collectionIndexExists
Проверяет существование индекса в коллекции.
collectionIndexInformation
Возвращает информацию об индексах коллекции.
initializeOrderedBulkOp
Инициирует упорядоченную групповую операцию записи: операции выполняются последовательно в порядке добавления, создавая новую операцию при смене типа.
initializeUnorderedBulkOp
Инициирует неупорядоченную групповую операцию записи: все операции буферизуются в команды insert/update/remove и выполняются в произвольном порядке.
insertMany
Вставляет массив документов в MongoDB.
insertOne
Вставляет один документ в MongoDB.
isCapped
Проверяет, является ли коллекция capped-коллекцией.
listCollectionIndexes
Возвращает список всей информации об индексах коллекции.
parallelCollectionScan
Возвращает N параллельных курсоров для коллекции, позволяя параллельное чтение всей коллекции без гарантий порядка результатов.
reIndex
Переиндексирует все индексы коллекции. Внимание: reIndex - блокирующая операция (индексы перестраиваются на переднем плане) и может быть медленной для больших коллекций.
rename
Изменяет имя существующей коллекции.
replaceOne
Заменяет документ в MongoDB.
updateMany
Обновляет несколько документов в коллекции на основе фильтра.
updateOne
Обновляет один документ в коллекции на основе фильтра.