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
ind
dans votre schémaClients
Utilisez-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?