解码此MongoDB查询
我有一个MongoDB组查询。我无法忍受大多数情况,但“reduce”函数中的“if”条件位让我感到困惑。我不知道这是为了什么解码此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;
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是什么?