【问题标题】:MongoDB dynamic query with javascript, working static, not with variable使用 javascript 的 MongoDB 动态查询,静态工作,而不是变量
【发布时间】:2019-10-20 09:02:42
【问题描述】:

我一直在使用标准的 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
    });
});

输出:

[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

【问题讨论】:

  • 另外,我使用反引号 () because I eventually want the query to look like $201{i}` 来循环遍历年份。查询不适用于 " 或 ' 任何一个:/

标签: node.js mongodb express mongodb-query


【解决方案1】:

这是一个正则表达式

/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);
})

【讨论】:

  • 谢谢,现在我知道我做错了什么。但这仍然对我不起作用。如果我使用你写的内容,我仍然得到 0 个结果。
  • date_of_something 是日期类型字段吗?数据是什么样子的
  • 这是数据的样子,“03.01.2014”。它是我们格式中的日期,写为字符串,而不是实际的日期类型。除非 mongo 自动检测到,从导入一个 json 文件。
  • 我应该把异步放在哪里?如果我只是使用它,则等待部分带有红色下划线。如果我保持原样,则正则表达式不起作用。如果我在 $regex: 字段中输入正则表达式,它作为一个变量起作用,而不是那么多。
  • 是的,这解决了!谢谢你,先生,你让我今晚睡了:)
猜你喜欢
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2021-06-02
  • 2019-04-12
  • 2013-10-07
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多