下記のreqUrl
という名前の着信リクエストURLを格納できる小さなアプリケーションをコーディングし、compareUrls
関数を使用して既に存在するかどうかを確認します。MongoDBのクエリと可変スコープ内での関数の使用
両方のWebサイトが同じドメインにある場合はtrueを返し、そうでない場合はfalseを返します(compareUrls(stackoverflow.com, http://www.stackoverflow.com)
など)。これは、重複するURLを追加しないように使用されます。
私はこのような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