- ordinamento tabella titoli

- migliorata la lista degli argomenti
This commit is contained in:
Surya Paolo
2025-04-23 01:59:45 +02:00
parent 58431c144c
commit 85e2df56e1
6 changed files with 78 additions and 47 deletions

View File

@@ -69,6 +69,7 @@ const catalogo = new Schema(
printable: { type: Boolean },
indebug: { type: Boolean },
maxnumlibri: { type: Number },
showListaArgomenti: { type: Boolean},
first_page: IDimensioni,
last_page: IDimensioni,

View File

@@ -241,9 +241,11 @@ module.exports.executeQueryTable = function (idapp, params) {
module.exports.executeQueryPickup = async function (idapp, params) {
let strfind = params.search;
let strfind = tools.removeAccents(params.search.trim().toLowerCase());
strfind = strfind.replace(/[-@]/g, '');
// Rimuove le parole "il" e "la" e gli spazi, le @ e i tabulazioni
// per non farli influire sulla ricerca
strfind = strfind.replace(/\b(il|la|gli|le|lo|un|una)\b/g, '').replace(/[-@\t]/g, '').trim();
if (strfind === '' && !params.filter) {
return [];
@@ -262,7 +264,7 @@ module.exports.executeQueryPickup = async function (idapp, params) {
$or: [
{
'productInfo.name': {
$regex: `(?i).*${tools.removeAccents(strfind)}.*`, // Cerca una o più parole che sono contenute
$regex: `(?i).*${strfind}.*`, // Cerca una o più parole che sono contenute
$options: 'i' // Rende la ricerca case-insensitive
}
},
@@ -275,15 +277,31 @@ module.exports.executeQueryPickup = async function (idapp, params) {
{
'productInfo.sku': strfind
},
{
$and: [
{
'productInfo.authors.name': {
$regex: `(?i).*${strfind.split(' ').shift()}.*`, // Cerca la prima parola
$options: 'i' // Rende la ricerca case-insensitive
}
},
{
'productInfo.authors.surname': {
$regex: `(?i).*${strfind.split(' ').pop()}.*`, // Cerca la seconda parola
$options: 'i' // Rende la ricerca case-insensitive
}
},
]
},
{
'productInfo.authors.name': {
$regex: `(?i).*${tools.removeAccents(strfind)}.*`, // Cerca una o più parole che sono contenute
$regex: `(?i).*${strfind}.*`, // Cerca una o più parole che sono contenute
$options: 'i' // Rende la ricerca case-insensitive
}
},
{
'productInfo.authors.surname': {
$regex: `(?i)\\b${tools.removeAccents(strfind)}\\b`, // Cerca parole che iniziano con strfind, e ignora gli accenti
$regex: `(?i).*${strfind}.*`, // Cerca una o più parole che sono contenute
$options: 'i' // Rende la ricerca case-insensitive
}
},
@@ -337,6 +355,7 @@ module.exports.executeQueryPickup = async function (idapp, params) {
authors: '$productInfo.authors',
idStatoProdotto: "$productInfo.idStatoProdotto",
},
arrvariazioni: "$arrvariazioni",
}
}
];

View File

@@ -31,27 +31,19 @@ module.exports.findAllIdApp = async function () {
const myquery = [
{
$sort: { DataOra: -1 } // Prima ordina per DataOra in modo decrescente
$sort: { IdStatoProdotto: 1, DataOra: -1 } // ordina per ID e DataOra decrescente
},
{
$group: {
_id: "$IdStatoProdotto", // Raggruppa per IdStatoProdotto
latestRecord: { $first: "$$ROOT" } // Prendi il primo record per ogni gruppo (cioè il più recente)
_id: "$IdStatoProdotto",
IdStatoProdotto: { $first: "$IdStatoProdotto" },
Descrizione: { $first: "$Descrizione" },
DataOra: { $first: "$DataOra" },
// aggiungi altri campi se servono
}
},
{
$lookup: {
from: 't_web_statiprodottos',
localField: '_id', // Usa _id che è l'IdStatoProdotto
foreignField: 'IdStatoProdotto',
as: 'record'
}
},
{
$replaceRoot: { newRoot: { $arrayElemAt: ["$record", 0] } } // Estrai il primo (e unico) record dal risultato di $lookup
},
{
$sort: { IdStatoProdotto: 1 } // Ordina per IdStatoProdotto, se necessario
$sort: { IdStatoProdotto: 1 } // opzionale, per ordinare il risultato
}
];