如何在多个集合中查询然后将结果写入相应的集合

时间:2015-05-15 08:38:18

标签: mongodb

如果我想查询用户的年龄> 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})

1 个答案:

答案 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