NodeJS: Mongoose jak zapobiegać dodawania identyfikatora do zagnieżdżonego dokumentu?
Opublikowano: 29.12.2022 - tagi: NodeJS Baza danych Mongoose Model Dokument JavaScript TypeScript
Zagnieżdżone dokumenty
Mongoose pozwala na dodawanie zagnieżdżonych dokumentów do kolekcji:
import { model, Schema } from 'mongoose';
export interface Tag {
name: string;
value: string;
}
export interface Product {
title: string;
description: string;
tags: Tag[];
}
const ProductSchema = new Schema<Product>({
title: { type: String, required: true },
description: { type: String, required: true },
tags: { type: [{
name: { type: String, required: true },
value: { type: String, required: true },
}],
default: () => []
}
}, { versionKey: false });
export const ProductModel = model('Product', ProductSchema);
Kiedy dodamy do kolekcji nowy rekord:
const productToAdd: Product = {
title: 'Some product',
description: 'Lorem ipsum',
tags: [
{ name: 'Tag 1', tag: 'tag1' },
{ name: 'Tag 2', tag: 'tag2' },
]
};
const addedProduct: Product = await ProductModel.create(productToAdd);
console.log(addedProduct);
Powstanie coś takiego:
{
_id: '5c2dcec42161327d7bf6bd63',
title: 'Some product',
description: 'Lorem ipsum',
tags: [
{
_id: '5caa542e2161327d7bf6c086'
name: 'Tag 1',
tag: 'tag1'
},
{
_id: '5cb183c82161327d7bf6c097',
name: 'Tag 2',
tag: 'tag2'
},
]
};
Po utworzeniu nowego dokumentu do rekordu zostały dodane trzy pola: _id. Jak pozbyć się identyfikatorów w zagnieżdżonym dokumencie (tags), jeśli ich nie potrzebujemy?
Zapobieganie dodawania identyfikatorów
Rozwiązanie jest banalne. Wróćmy do definicji naszego modelu. Skupmy się problematycznym tags:
tags: {
type: [{
_id: false, // Ustawiamy flagę
name: { type: String, required: true },
value: { type: String, required: true },
}],
default: () => []
}
Jak widać, wystarczy dodać pole: _id: false, aby pozbyć się niechcianych identyfikatorów!