我想编写一个小应用程序,在那里我可以存储传入的请求url,名为reqUrl
,并使用compareUrls
函数检查它是否已经存在。在MongoDB查询和变量范围内使用函数
如果两个网站都在同一个域中,则返回true,否则返回false,例如,在做compareUrls(stackoverflow.com, http://www.stackoverflow.com)
时。这是为了避免添加重复的网址。
我试图使用该功能的MongoDB的查询里面是这样的:
app.get("/:reqUrl", function(req, res)
{
var reqUrl = req.params.reqUrl;
MongoClient.connect(Url, function(err, db)
{
if (err) throw err;
db.collection("mydb").find({$where: function() {
if (compareUrls(reqUrl, this.url) //if true, simply return the url
{
return this.url;
} else { //if not existing insert it into the database
db.collection("mydb").insert({"url":reqUrl});
};
}}).toArray();
//Code continues below
现在的问题是,因为作用域时,reqUrl
变量不承认,我不知道任何解决办法。即使在使用局部变量compareUrls
时,我也可以找回所有元素。我想通过简单地调用.find
并检查reqUrl
针对每个项目来恢复所有结果到一个数组,但是这远远超过了效率。
请注意,我对MongoDB非常陌生。
任何反馈将不胜感激,谢谢。
'reqUrl'初始化在哪里? – Cynigo
''MongoClient.connect()'外面的东西,我会编辑我的问题 – Valilutzik
你不能在'$ where'函数内执行像'insert'这样的数据库操作。 – JohnnyHK