需要帮助理解循环与mongodb聚合$ cond

时间:2016-08-12 00:40:47

标签: javascript mongodb aggregation-framework

当使用mongoDb' s $ in子句时,这是(并且成功地)维护数组(var list)的顺序。

但是,我并不是100%清楚它的逻辑。

我理解它向后迭代,以保持顺序,但为什么你会指定ref在i-1列出,而不是我?

更多基本的java脚本知识,但它正在测试我当前的Noobness。

如果有人可以帮我分解一下所发生的事情,我会很感激。

var list = [ 4, 2, 8 ];

var stack = [];

for (var i = list.length - 1; i > 0; i--) {

    var rec = {
        "$cond": [
            { "$eq": [ "$_id", list[i-1] ] },
            i
        ]
    };

    if ( stack.length == 0 ) {
        rec["$cond"].push( i+1 );
    } else {
        var lval = stack.pop();
        rec["$cond"].push( lval );
    }

    stack.push( rec );

}

var pipeline = [
    { "$match": { "_id": { "$in": list } }},
    { "$project": { "weight": stack[0] }},
    { "$sort": { "weight": 1 } }
];

db.collection.aggregate( pipeline );

1 个答案:

答案 0 :(得分:0)

问题:why would you assign ref to list at i -1 , and not i?

让我们来看下面的例子

var arr = [a,b,c,d,r,f];

console.log(arr.length); //This will give you 6
console.log(arr.indexOf('a'));// Will give you 0.

因此,如果您想从阵列中访问f,则必须使用

var index = arr[arr.length-1];
console.log(index); //This will give `f`;

希望你现在明白我的疑问。

在这里测试代码:



var arr = ['a','b','c','d','e','f'];
console.log(arr.length);
console.log(arr.indexOf('a'));

var len = arr.length;
console.log(arr[len-1]);
console.log(arr[len]);