J'ai une collection de 200 000 documents, chacun contenant un champ "CustomerName". Il y a environ 1k valeurs "customerName" uniques. (le champ est indexé)mongoose - Rend des valeurs distinctes et slugifie ces valeurs
J'ai besoin de rendre une liste de ces noms de clients et de générer un slug pour chacun, afin que je puisse utiliser dans mon URL de routage. L'étape suivante consisterait à afficher une page pour chaque nom de client qui affiche tous les documents contenant ce nom de client.
Voici ce que j'ai jusqu'ici,
/// Customer.js
const rmaSchema = new Schema({
CustomerName: { type: String, index: true },
slug: String },
{ collection : 'mycompany' // collection name
});
rmaSchema.pre('save', function(next) {
this.slug = slugify(this.CustomerName) ;
next();
});
const rmaModel = mongoose.model('Rma', rmaSchema);
module.exports = rmaModel;
// function to slugify a name
function slugify(text) {
return text.toString().toLowerCase()
.replace(/\s+/g, '-') // Replace spaces with -
.replace(/[^\w\-]+/g, '') // Remove all non-word chars
.replace(/\-\-+/g, '-') // Replace multiple - with single -
.replace(/^-+/, '') // Trim - from start of text
.replace(/-+$/, ''); // Trim - from end of text
}
/// Customer.Controller.js
function showCustomers(req, res){
Rma.distinct('CustomerName', function(err, customers) {
if (err){
res.status(404);
res.send('customers not found!');
}
res.render('pages/customers', {customers: customers});
});
};
module.exports = showCustomers;
/// customer.ejs
<table class="table table-bordered table-hover table-striped">
<tbody>
<% for (var customer of customers) { %>
<tr>
<td><%= customer.CustomerName %></td>
<td><a href="/events/<%= customer.slug %>" class="btn btn-sm btn-primary">Generate Report</a></td>
</tr>
<% } %>
</tbody>
Les limaces ne sont-elles pas censées être uniques? – Mikey