Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
解码此MongoDB查询_Mongodb_Group By_Mongodb Query - Fatal编程技术网

解码此MongoDB查询

解码此MongoDB查询,mongodb,group-by,mongodb-query,Mongodb,Group By,Mongodb Query,我有一个MongoDB组查询。我无法忍受大多数情况,但“reduce”函数中的“if”条件位让我感到困惑。我不知道这是为了什么 db.users.group({ "initial": { "countstar": 0 }, "reduce": function(obj, prev) { if (true != null) if (true instanceof Array) prev.countstar += true.length;

我有一个MongoDB组查询。我无法忍受大多数情况,但“reduce”函数中的“if”条件位让我感到困惑。我不知道这是为了什么

db.users.group({
    "initial": {
        "countstar": 0
    },
    "reduce": function(obj, prev) {
        if (true != null) if (true instanceof Array) prev.countstar += true.length;
        else prev.countstar++;
    },
    "cond": {
        "location": null
    }
});
我知道“初始”参数的作用。我还知道“cond”参数在做什么。然而,“reduce”参数中的整个位令人困惑


另外,什么是等效的SQL?

如果我们重新格式化它,就更容易理解:

db.users.group({
   "initial": { "countstar": 0 },
   "reduce": function(obj, prev) {
        if (true != null) {
            if (true instanceof Array)
                prev.countstar += true.length;
            else 
                prev.countstar++;
        }
    },
    "cond": { "location": null }
 });

这肯定有问题,因为
true
在Javascript中是一个布尔值,所以第一个条件始终保持不变,第二个条件永远不保持不变,
true.length
未定义的
。看起来
true
应该由
obj
的某些属性代替。在这种情况下,代码所做的是将数组属性
true
应该引用的任意数组的长度相加,将非数组值计算为长度1数组。这个代码是从哪里来的?它是否真的起作用并给你带来有意义的结果?你想从这个代码中得到什么结果?我想你应该把这个函数扔掉。你可以用聚合做同样的事情,它会工作得更好。既然你不应该使用这段代码,而我又不能胜任SQL,我就不会尝试将它转换成SQL。

我猜在某个地方有一个名为true的变量,代码会检查如何处理它?@alernerdev好的,那么这两个连续的if条件意味着什么?它们是嵌套的吗?是的,嵌套的。其要点是:检查其是否为空。如果不是,请检查其数组。如果是数组,请添加数组的长度。如果不是数组,只需增加1。您可以通过使用缩进将其拆分为多行,并加上大括号以便更好地测量,从而使其更具可读性。您也可以使用此代码,设置不同的“true”值并观察发生的情况谢谢!另一个问题:MongoDB查询的等效SQL是什么?