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