2

スクリプトに少し問題があります。「$where」内の関数にパラメーター (例では MYPARAMETER) を渡すことができません。

あなたは私を助けるためのアイデアを持っていますか? ありがとう。

var MYPARAMETER = "dqsd qsdqs &é&é";

MyCol.findOne({

    $where: function(MYPARAMETER) 
    { 
        var tab1="ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ!#$€%&'`(),;:/@.*[]\|";
        var tab2=   "aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn                      ";
        rep2=tab1.split('');
        rep=tab2.split('');
        parray=new Array();
        var i=-1;
        while(rep2[++i])
        {
            parray[rep2[i]]=rep[i]
        }
        var chaine = this.name.replace(/\s{1,}/g,"-");
        chaine = chaine.replace(/./g, function($0){return (parray[$0])?parray[$0]:$0 });
        chaine = chaine.replace(/\s/g,"");


        return (chaine == MYPARAMETER);
    }
}, 
4

4 に答える 4

3

A$whereはサーバー上で実行されるため、別のサーバーでローカルに宣言された変数にはアクセスできません。JavaScript は一般的に MongoDBでは最後の手段として使用する必要がありますが、これは逆に多くの非常に時間のかかる作業を実行しているように見えます。

関数を文字列として構築し、値を直接含める必要があります。

于 2013-10-31T18:09:10.183 に答える
1

$whereクエリで変数を使用するには、最初に mongo クエリを文字列として作成し、パラメータとして渡すときに文字列をJSONに解析します

例:

var query = '{"$where": "function() { return (\'' + address + '\').indexOf(this.city) >= 0 }"}';
db.city.find(JSON.parse(query);
于 2018-05-08T06:30:14.213 に答える