我需要将数据分组到集合大小的子组中。例如,如果有6条记录,按日期排序。
[1,2,3,4,5,6]
和我的子群大小为2。我最终会得到一个数组(长度为3)的数组(每个长度为2):
[[1,2],[3,4],[5,6]]
没有关于分组的记录因素,只有它们在所有分组中如何排序和子组大小。
聚合框架有什么可以帮助这一点吗?
目前最好的方法是使用mapReduce:
db.collection.mapReduce(
function() {
var result = [];
var x = 0;
for ( x=0; x < Math.floor( this.array.length / 2 ); x+2 ) {
result.push( this.array.slice( x, x+2 ) );
}
var diff = Math.ceil( this.array.length )
- Math.floor( this.array.length );
if ( diff != 1 )
result.push( this.array.slice( x, x+diff ) );
emit( this._id, result );
},
function(){},
{
"out": { "inline": 1 }
}
);
或者类似的东西
聚合框架不能很好地完成slice
类型的操作,但是JavaScript进程可以,特别是在这种情况下。