J'ai cette fonction, où je récupère un tableau d'objets, j'ai alors une boucle for pour faire une boucle sur les objets, et y ajouter un attribut index ou ind:
[
{_id: ..., ind: 0},
{_id: ..., ind: 1},
...
]
mais lorsque j'exécute ceci, les données sont renvoyées sous la forme
[
{ _id: ... },
{ _id: ... },
...
]
au lieu de:
module.exports.getCustomers = async (req, res) => {
let customers = await Customers.find({}, { "_id": 1 });
for (var i = 0; i < customers.length; i++) {
customers[i].ind = i;
}
console.log(customers)
}
S'il vous plaît, comment puis-je résoudre ce problème
4 Réponses :
Il semble que vos objets sont gelés, identifiez la bibliothèque que vous utilisez pour récupérer ces éléments à partir de votre source de données, mais vous pouvez en savoir plus sur le gel des objets ici https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/ geler
La question est balisée mongodb
changez votre pour et transformez-le en map
let mappedCustomers = customers.map((customer, index) => {
return {...customer, ind: index};
});
ou au lieu de cela renvoyer le client, vous pouvez créer un tout nouveau client .
module.exports.getCustomers = async (req, res) => {
let customers = await Customers.find({}, { "_id": 1 });
let mappedCustomers = customers.map((customer, index) => {
customer['ind'] = index;
return customer;
});
console.log(mappedCustomers);
return mappedCustomers;
}
Essayez de copier les valeurs vers les objets cibles individuels avec Object.assign .
module.exports.getCustomers = async(req, res) => {
let customers = await Customers.find({}, {
"_id": 1
});
for (var i = 0; i < customers.length; i++) {
Object.assign(customers[i], {
ind: i
});
}
console.log(customers);
}
Je l'ai enfin résolu. Je pense que mangouste a joué avec ça. Mais l'ajout de ._doc semble l'avoir corrigé
for (let i = 0; i < customers.length; i++) {
let customer = customers[i],
customer._doc = {
...customer._doc,
index: i
};
}
Avez-vous essayé
Object.assign?il n'y a rien de mal avec le code fourni pouvez-vous nous donner plus d'informations sur Customers.find ()
essayez ceci:
wait Customers.find ({}, {"_id": 1}). toArray ();Pouvez-vous indiquer la valeur de
await Customers.find ({}, {"_id": 1})? Pour qu'il soit plus facile de fournir une solution.Clients.update ({_id: 1}, {ind: '...'}, {multi: true}, function (err, num) {});Double possible de Comment renvoyer la réponse d'un asynchrone appeler?
Clients.find ()renvoie un curseur , vous découvrez ici comment l'utiliser correctementvous pouvez ajouter un champ
inddans votre schémaClientsUtilisez-vous de la mangouste?
@Anthony Winzlet oui je le suis
Ensuite, utilisez
.lean ()@Anthony Winzlet où et comment?
Avez-vous vérifié la réponse?