Repositorio
Resumen
En un objeto de colección dado, puede obtener su objeto Repository para realizar operaciones de lectura y escritura en la colección.
const { UserCollection } = require('./collections');
const UserRepository = UserCollection.repository;
const user = await UserRepository.findOne({
filter: {
id: 1,
},
});
user.name = 'new name';
await user.save();
Consulta
Consulta básica
En el objeto Repository, puede llamar a los métodos relacionados con find* para realizar operaciones de consulta. Todos los métodos de consulta admiten el paso de un parámetro filter para filtrar datos.
// SELECT * FROM users WHERE id = 1
userRepository.find({
filter: {
id: 1,
},
});
Operadores
El parámetro filter en Repository también ofrece una variedad de operadores para realizar operaciones de consulta más diversas.
// SELECT * FROM users WHERE age > 18
userRepository.find({
filter: {
age: {
$gt: 18,
},
},
});
// SELECT * FROM users WHERE age > 18 OR name LIKE '%张%'
userRepository.find({
filter: {
$or: [{ age: { $gt: 18 } }, { name: { $like: '%张%' } }],
},
});
Para más detalles sobre los operadores, consulte Operadores de filtro.
Control de campos
Al realizar una operación de consulta, puede controlar los campos de salida a través de los parámetros fields, except y appends.
fields: Especifica los campos de salida.
except: Excluye los campos de salida.
appends: Añade campos asociados a la salida.
// El resultado solo incluirá los campos id y name
userRepository.find({
fields: ['id', 'name'],
});
// El resultado no incluirá el campo password
userRepository.find({
except: ['password'],
});
// El resultado incluirá datos del objeto asociado posts
userRepository.find({
appends: ['posts'],
});
Consulta de campos asociados
El parámetro filter admite el filtrado por campos asociados, por ejemplo:
// Consulta objetos de usuario cuyos posts asociados tienen un objeto con el título 'post title'
userRepository.find({
filter: {
'posts.title': 'post title',
},
});
Los campos asociados también pueden anidarse.
// Consulta objetos de usuario donde los comentarios de sus posts contienen palabras clave
await userRepository.find({
filter: {
'posts.comments.content': {
$like: '%keywords%',
},
},
});
Ordenación
Puede ordenar los resultados de la consulta utilizando el parámetro sort.
// SELECT * FROM users ORDER BY age
await userRepository.find({
sort: 'age',
});
// SELECT * FROM users ORDER BY age DESC
await userRepository.find({
sort: '-age',
});
// SELECT * FROM users ORDER BY age DESC, name ASC
await userRepository.find({
sort: ['-age', 'name'],
});
También puede ordenar por los campos de objetos asociados.
await userRepository.find({
sort: 'profile.createdAt',
});
Creación
Creación básica
Cree nuevos objetos de datos a través del Repository.
await userRepository.create({
name: '张三',
age: 18,
});
// INSERT INTO users (name, age) VALUES ('张三', 18)
// Admite la creación masiva
await userRepository.create([
{
name: '张三',
age: 18,
},
{
name: '李四',
age: 20,
},
]);
Creación de asociaciones
Al crear, tambi én puede crear objetos asociados simultáneamente. De forma similar a las consultas, también se admite el uso anidado de objetos asociados, por ejemplo:
await userRepository.create({
name: '张三',
age: 18,
posts: [
{
title: 'post title',
content: 'post content',
tags: [
{
name: 'tag1',
},
{
name: 'tag2',
},
],
},
],
});
// Cuando crea un usuario, se crea una publicación y se asocia con el usuario, y se crean etiquetas y se asocian con la publicación.
Si el objeto asociado ya existe en la base de datos, puede pasar su ID para establecer una asociación con él durante la creación.
const tag1 = await tagRepository.findOne({
filter: {
name: 'tag1',
},
});
await userRepository.create({
name: '张三',
age: 18,
posts: [
{
title: 'post title',
content: 'post content',
tags: [
{
id: tag1.id, // Establece una asociación con un objeto asociado existente
},
{
name: 'tag2',
},
],
},
],
});