Cześć,
Czy jest możliwość sortowania w mongoose takim sposobem?
MyModel.find({}).sort(['obiekt.tablica[0].wartość', 'DESC'])
W dokumentacji nie znalazłem o tym informacji a sam mongoDB ma w zapytaniach parametr $sort w którym chyba już tak można.
Na froncie korzystam z React Admin. Wysyła on taki link
http://api.mojastrona.pl/zasob?filter={}&order=DESC&page=1&perPage=10&sort=winers[0]
W Node.js mam:
Middleware
export const paramsFilter = (req, res, next) => {
const reqParams = req.query;
const allowParams = ['year', 'month', 'filter', 'range', 'sort'];
const params = {};
allowParams.forEach(value => {
if (reqParams[value]) {
params[value] = JSON.parse(reqParams[value]);
}
});
req.query = params;
next();
}
Kontroller
api.get('/', [authJWT, paramsFilter], asyncFn(async (req, res) => {
const params = req.query;
const draws = await drawsMethods.show(params);
res.set('Content-Range', 'draws 0-10/100'); //wartości na sztywno są roboczo
res.set('Access-Control-Expose-Headers', 'Content-Range');
res.status(200).json(draws);
}));
metoda show
export const show = (params) => {
const {range, sort} = params;
const [start, end] = range;
return Draws
.find({})
.select('id time numbers winers stats range -_id')
.skip(start)
.sort([sort])
.limit(end - start + 1);
}
req.body po filtrowaniu i użyciu pasera wyglądają tak:
{ filter: {}, range: [ 0, 9 ], sort: [ 'winers[0]', 'DESC' ] }
Jest sposób żeby tablicy sort już nie przekształcać czy muszę ją jeszcze czymś potraktować?
Użycie qs lub query-string raczej nic nie da.
Może w ogóle źle się za to zabrałem?
Gdy mam
{ filter: {}, range: [ 0, 9 ], sort: [ 'winers', 'DESC' ] }
to działa, ale wiadomo że nie tak jak powinno.
Może powinienem uprościć bazę...
Tablica "winers" w bazie dla każdego dokumentu wygląda tak:
winers: [
{
type: 6,
count: 0,
prize: 0
}
{
type: 5,
count: 7,
prize: 4332432
}
{
type: 4,
count: 244,
prize: 4234 }
{
type: 3,
count: 3453,
prize: 12
}
]