J'ai une situation similaire où j'ai une catégorie principale telle que :
{
"service": {
"isReviewed": false,
"_id": "5ea36b27d7ae560845afb88d",
"mainCategory": "message ",
"SubCategory": [
{
"priceChanged": true,
"_id": "5ea36b27d7ae560845afb88e",
"subCatPrice": "26",
"subCatName": "mustach trimming"
}
],
"shopName": "paddy the barber",
"user": "5ea1fd5b69512dc72ad2f48c",
"date_created": "2020-04-24T22:41:43.368Z",
"__v": 5
}
}
Maintenant, il a fallu un certain temps pour comprendre comment mettre à jour une partie du sous-document, car le sous-document est stocké en tant qu'objet.
Pour commencer, je vérifie d'abord l'_id du document lorsqu'il est passé par le put/:id. Ensuite, je vérifie le propriétaire du document par rapport à req.user.
Si tout est bon, je boucle à travers le tableau puis je crée un nouvel objet. Ensuite, tout ce que je fais, c'est vérifier chaque req.body pour le prix ou le nom, s'il y a un nouveau prix, je mettrais simplement à jour la valeur du prix dans l'objet. S'il y a une nouvelle valeur, alors l'objet reste le même.
Ensuite, tout ce que j'ai dit, c'est que service.SubCategory = newObject et enregistrer les données.
Tout fonctionne bien, cependant, j'ai rencontré le problème de la mise à jour de l'_id du sous-document, j'ai donc réglé cela en conservant la vieille valeur telle qu'elle.
Maintenant, en termes de performance et d'optimisation, je ne suis pas entièrement sûr que ce soit la bonne méthode, mais cela fonctionne et s'il y a une meilleure façon, je suis prêt à changer.
Voici le code :
const newObject = {
subCatPrice: "",
subCatName: "",
_id: "",
priceChanged: false
};
let oldDetails = service.SubCategory;
for (const old of oldDetails) {
newObject.subCatPrice = old.subCatPrice;
newObject.subCatName = old.subCatName;
newObject._id = old._id;
}
price ? (newObject.subCatPrice = price ) && (newObject.priceChanged = true) : newObject.subCatPrice;
name ? (newObject.subCatName = name) : newObject.subCatName;
(service.SubCategory = newObject), await service.save();
J'ai utilisé l'idée de l'état de React pour être honnête, où je prends simplement une copie de l'objet et la garde et j'applique une mise à jour à la partie que je veux mettre à jour.
Encore une fois, en termes de code propre et de tout ça, je ne suis pas sûr que ce soit la bonne façon de le faire, mais je suis aussi un étudiant en programmation et j'aimerais aussi apprendre.
J'espère que cela aidera quelqu'un