Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用javascript的MongoDB动态查询,静态工作,不使用变量_Node.js_Mongodb_Express_Mongodb Query - Fatal编程技术网

Node.js 使用javascript的MongoDB动态查询,静态工作,不使用变量

Node.js 使用javascript的MongoDB动态查询,静态工作,不使用变量,node.js,mongodb,express,mongodb-query,Node.js,Mongodb,Express,Mongodb Query,我一直在用标准的mongodb驱动程序3.2.6版在express中编写一个应用程序。我需要对我的数据库进行查询,我想查询5年并每年统计条目。当我以静态方式编写代码时,它可以毫无问题地工作,如果我将相同的精确值放入变量并将其插入查询,它将拒绝工作 我很抱歉,如果这是我明显错过的事情,但我没有找到解决办法。感谢所有试图提供帮助的人:) 这个代码有效。输出为贝娄 router.get("/test", (req, res) => { result = { title :

我一直在用标准的mongodb驱动程序3.2.6版在express中编写一个应用程序。我需要对我的数据库进行查询,我想查询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
    });
});
此代码不起作用

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
    });
});
这是一个正则表达式

/2014/ 
但是这个带回记号的只是一个普通的字符串

`/2014/` 
要从字符串创建新的正则表达式,可以这样做

const query = new RegExp(`201${i}`)
在MongoDB中,要使用正则表达式进行匹配,应该使用运算符

还值得注意的是,在返回结果
res.json
而不等待查询完成时,应该
wait
等待查询,请求处理程序应该是
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);
})

另外,我使用backticks(
)是因为我最终希望查询看起来像
$201{I}`,以循环多年。查询不适用于“或”二者之一:/谢谢,现在我知道我做错了什么。但这仍然不适用于我。如果我使用您编写的内容,我仍然会得到0个结果。
date\u of\u something
是一个日期类型字段?数据的外观如何这是数据的外观”,2014年1月3日“。它是我们格式的日期,以字符串形式编写,不是实际的日期类型。除非mongo在导入json文件时自动检测到它。我应该将异步文件放在哪里?如果我用的话,等待部分的下划线是红色的。如果我保持它原来的样子,正则表达式就不起作用了。如果我在$regex:字段中输入regex,它作为一个变量工作,不会太多。是的,这就解决了它!谢谢你,先生,你让我今晚可以睡觉:)
const query = new RegExp(`201${i}`)
{"date_of_something": {$regex: query}}
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);
})