mongo导出数组元素

时间:2015-09-16 12:35:22

标签: mongodb mongodb-query

我想导出3个不同的csv文件,这是我的文档

{

"capacities" : [ 
    {
        "size" : "A",
        "incoming_parcels" : 27,
        "outgoing_parcels" : 0,
        "empty_compartments" : 0
    }, 
    {
        "size" : "B",
        "incoming_parcels" : 11,
        "outgoing_parcels" : 0,
        "empty_compartments" : 8
    }, 
    {
        "size" : "C",
        "incoming_parcels" : 2,
        "outgoing_parcels" : 1,
        "empty_compartments" : 7
    }
]

}

我想获得所有文件,其中capacity [1] = B然后得到所有字段 - 所有字段都相同。

以下是我的导出语法:

mongoexport.exe --db name --collection name --type csv --out sizeB.csv -q "{'capacities.1.size': 'B'}" -f size,incoming_parcels,outgoing_parcels,empty_compartments

我也尝试过-f capacity.1.size等

1 个答案:

答案 0 :(得分:1)

您可以采取的一种方法是使用 aggregation framework 过滤您的文档,使用上述查询作为 $match 运算符,然后编写使用 $out 运算符将聚合管道返回到指定集合的​​文档。然后,您可以从该聚合输出集合中导出数据。以下概述了这一概念:

db.test.aggregate([
    {
        "$match": {
            "capacities.size": "B"
        }
    },
    {
        "$unwind": "$capacities"
    },
    {
        "$match": {
            "capacities.size": "B"
        }
    },
    {
        "$project": {            
            "size" : "$capacities.size",
            "incoming_parcels" : "$capacities.incoming_parcels",
            "outgoing_parcels" : "$capacities.outgoing_parcels",
            "empty_compartments" : "$capacities.empty_compartments",
        }
    },
    {
        "$out": "capacities_output"
    }
])

导出到csv:

mongoexport.exe --db name --collection "capacities_output" --csv > sizeB.csv --fields size,incoming_parcels,outgoing_parcels,empty_compartments