如果我想查询用户的年龄> 18,
并将结果导出到相应的集合
如何通过重写以下脚本来实现?
以下是伪代码
source_collections = ["user_1", "user_2", ..., "user_999"]
output_collections = ["result_1", "result_2", ..., "result_999"]
pipeline = [
{
"$match":{"age": > 18}
}
{ "$out" : output_collections }
]
cur = db[source_collections].runCommand('aggregate',
{pipeline: pipeline,allowDiskUse: true})
答案 0 :(得分:1)
您正在寻找的脚本如下:
var prefix_source = 'user_';
var prefix_output = 'result_';
var source_collections = [];
var output_collections = [];
var numCollections = 999;
for (var i = 1; i <= numCollections; i++) {
source_collections.push(prefix_source + i);
output_collections.push(prefix_output + i);
}
var pipeline = [{'$match': {age: {'$gt': 18}}}, {'$out': ''}]; for (var currentCollection = 0; currentCollection < source_collections.length; currentCollection++) {
pipeline[pipeline.length - 1]['$out'] = output_collections[currentCollection];
var cur = db[source_collections[currentCollection]].runCommand('aggregate', {pipeline: pipeline,allowDiskUse: true});
}
虽然您正在使用它,var cur = ...
行可以简化为
db[source_collections[currentCollection]].aggregate(pipeline, {allowDiskUse: true});
注意:我已经添加了一个为您生成阵列的部分,因为我确定您不想手动编写它们:D