我有一个MongoDB组查询。我认为大部分内容都是如此,但是' 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'参数正在做。然而,整个内部的减少'参数令人困惑。
此外,什么是等效的SQL?
答案 0 :(得分:0)
如果我们重新格式化它会更容易理解:
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
是undefined
。看起来true
应该由obj
的某些属性代替。在这种情况下,代码所做的是,将数组属性true
应该引用的长度相加,将非数组值计为长度为1的数组。这段代码来自哪里?它真的起作用并给你一个有意义的结果吗?你想从这段代码得到什么结果?我认为你应该抛出这个功能。你可以用聚合做同样的事情,它会更好地工作。既然你不应该使用这个代码而且我不能胜任SQL,我就不会尝试将它翻译成SQL。