当使用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 );
答案 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]);