MongoDB динамический запрос с JavaScript, работает статический, а не с переменной - PullRequest
2 голосов
/ 04 июня 2019

Я пишу приложение в экспрессе, используя стандартный драйвер mongodb, версия 3.2.6.Мне нужно сделать запрос к моей базе данных, и я хотел бы сделать это в течение 5 лет и подсчитывать записи для каждого года.Когда я пишу код статически, он работает без проблем, если я столько же помещаю одно и то же точное значение в переменную и вставляю его в запрос, он отказывается работать.

Я извиняюсь, если это что-то очевидное, я пропустил, но я не могу найти решение.Спасибо всем, кто пытается помочь:)

Этот код работает.Вывод ниже

router.get("/test", (req, res) => {
    result = {
        title : "Somethings through time",
        data : []
    }
    for(let i = 4;i<9;i++) {
        const query = `/2014/`;
        db.getDB().collection("somethings").find({"date_of_something": /2014/}).count().then(numOf => {
            console.log(query +"\n"+numOf);
        });
    }
    res.json({
        success: false
    });
});

Вывод:

[0] /2014/
[0] 24263
[0] /2014/
[0] 24263
[0] /2014/
[0] 24263
[0] /2014/
[0] 24263
[0] /2014/
[0] 24263

Этот код не работает.

router.get("/test", (req, res) => {
    result = {
        title : "Somethings through time",
        data : []
    }
    for(let i = 4;i<9;i++) {
        const query = `/2014/`;
        db.getDB().collection("somethings").find({"date_of_something": query}).count().then(numOf => {
            console.log(query +"\n"+numOf);
        });
    }
    res.json({
        success: false
    });
});

Вывод:

[0] /2014/
[0] 0
[0] /2014/
[0] 0
[0] /2014/
[0] 0
[0] /2014/
[0] 0
[0] /2014/
[0] 0

1 Ответ

1 голос
/ 04 июня 2019

Это регулярное выражение

/2014/ 

Но этот с обратными галочками - просто обычная строка

`/2014/` 

Чтобы создать новое регулярное выражение из строки, вы можете сделать это следующим образом

const query = new RegExp(`201${i}`)

В MongoDB для сопоставления с использованием регулярного выражения вы должны использовать $regex оператор

{"date_of_something": {$regex: query}}

Также стоит отметить, что вы возвращаете результат res.jsonне дожидаясь завершения запросов, вы должны await для запросов, а обработчик запросов должен быть async

router.get("/test", async (req, res) => {
    ...
    const numOf = await db.getDB().collection("somethings")
                   .find({"date_of_something": {$regex: query}}).count();
    console.log(query +"\n"+numOf);
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...