Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用类似mongo的动态表达式从数组中删除特定元素_Javascript_Node.js_Mongodb Query - Fatal编程技术网

Javascript 使用类似mongo的动态表达式从数组中删除特定元素

Javascript 使用类似mongo的动态表达式从数组中删除特定元素,javascript,node.js,mongodb-query,Javascript,Node.js,Mongodb Query,我正在设计一个类似mongo的轻型数据库,它采用面向对象的查询语句,以便每个周期性分离的引用可以是函数或对象引用: foo.users.find( args ); foo.users.remove( args ); 其中args是JSON编码的对象字符串 我的数据库支持的每个函数都必须有一个指向当前结果集的指针(由obj给出)以及一个比较器对象,类似于mongo中的那些 remove:function(obj,comp){ comp = JSON.parse(comp); va

我正在设计一个类似mongo的轻型数据库,它采用面向对象的查询语句,以便每个周期性分离的引用可以是函数或对象引用:

foo.users.find( args );
foo.users.remove( args );
其中args是JSON编码的对象字符串

我的数据库支持的每个函数都必须有一个指向当前结果集的指针(由obj给出)以及一个比较器对象,类似于mongo中的那些

remove:function(obj,comp){
    comp = JSON.parse(comp);
    var result = [];
    for(var i =obj.length-1;i>=0;--i){

        /**For each object in the array*/
        var match = true;
        for(var key in comp){
            /**For each comparator field*/

            for(var test in comp[key]){
                /**For each logical comparator test*/
                if(comparators[test](obj[i][key],comp[key]) == false){
                    /**A logical test failed, this item does not match
                    all the criteria*/
                    match=false;
                    break;
                }
            }

        }
        if(match == true){
            /**The item matches the given criteria*/
            result.push( obj.slice(i,i+1)[0] );
        }
    }
    return result;
}
在我的特定用例中,查询:

users.remove({"username":{"$eq":"Hello_World"}})
即使以类似的方式在同一数据集上运行的其他查询也可以正常工作,但不起作用。“用户”引用指向树上的一个位置,该位置是一个对象数组,它确实包含相应的用户对象

对树的更改应该是永久性的,但是,它目前并不是这样工作的。对该树的进一步查询将显示用户“Hello_World”从未被删除,并且是有效用户


除类似功能外,未对“obj”进行任何更改。此外,返回值应该是一个包含1个对象的对象数组,但不包含任何对象。

我已找到并解决了以下问题:

  • 我在第三个嵌套循环中的比较器测试应该是:

    如果(比较器[测试](obj[i][key],comp[key][test])==false){

  • }

  • 请尝试obj.splice(),而不是obj.slice()。我能理解的唯一逻辑是,我的NodeJS环境不支持该函数(我通常不这么认为)

  • 最后,它按照指示工作,现在可以处理更大更好的事情了

    所有有效的javascript?没有id10t错误?