Perdón por el título realmente malo, no sé cómo describir mejor el problema.

Tengo esto en Schema: 'language': [String]

Luego, en el enrutador, envío una solicitud GET:

let page = Math.max(0, req.query.page - 1);
let take = req.query.take || 50;
let languages = req.query.languages;

let filter = {language: {$in: [languages]}};

let query = Labels.find(filter).limit(100).sort('-_id');

    query.count(function (err, count) {
        if (err) {console.log(err);}
        query.skip(page * take).limit(take).exec('find', function (err, docs) {
            if (err) {
                return res.status(400).send({
                    message: err
                });
            } else {
                res.json({
                    count   : count,
                    docs    : docs,
                    language: languages
                });
            }
        });
    });

Esta es la URL GET: http://localhost:3003/api/v1/test/query?take=50&page=1&languages="be","bg"

El problema es que siempre obtengo 0 count, pero si escribo directamente dentro del filtro var ex. let filter = {language: {$in: ["be","bg"]}}; entonces el resultado vuelve con todos los documentos correctos.

Cuando en la consola registro la var languages, obtengo: "be","bg" por lo que los parámetros están bien.

¿Qué está pasando aquí?

0
Stathis Ntonas 5 sep. 2017 a las 16:11

2 respuestas

La mejor respuesta

req.query.languages no es una matriz. Debe cambiar el lado del cliente para enviar una matriz correcta en la consulta: http://localhost:3003/api/v1/test/query?take=50&page=1&languages=be&languages=bg o actualizar una acción para analizar el parámetro languages.

let languages = req.query.languages; // when languages is an array
// OR
let languages = req.query.languages.split(','); // when languages is a string

let filter = {language: { $in: languages }};
1
alexmac 5 sep. 2017 a las 13:14

Intenta cambiar

let filter = {language: {$in: [languages]}};

Para

let filter = {language: {$in: languages.split(',')}};

Y hacer

http: // localhost: 3003 / api / v1 / test / query? take = 50 & page = 1 & languages ​​= be, bg

1
ponury-kostek 5 sep. 2017 a las 13:15