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 回答
0

这对我有用,只需尝试将查询作为字符串存储在一个变量中,然后将您的变量连接到查询字符串中,

var local_var = 42

var query = "{$where: function() { return this.a == "+local_var+"}}"

db.test.find(查询)

观看参考示例

于 2017-08-30T11:25:44.997 回答
0

使用 $where 运算符将包含 JavaScript 表达式的字符串或完整的 JavaScript 函数传递给查询系统。

要传递一个变量,只需创建一个包含您的本地数据的字符串,如下所示(您不需要解析它):

const myLocalVar = "test"    

const $where =  `function() { 
                return this.template.indexOf('${myLocalVar}')>=0
            }`

db.collection.find({$where})
于 2021-07-06T16:56:02.787 回答