2014-10-15 2 views
3

Я использую версию MongoDB 2.6.x. И мне нужно экспортировать документы из определенной коллекции.MongoDB - mongoexport все объекты в вложенном массиве

mongoexport - это инструмент, который служит потребностям. Однако я не знаю, как экспортировать все объекты под вложенным массивом. Ниже приведен образец документа, который у меня есть.

{ 
    "_id": 1, 
    "field_1": "value1", 
    "field_2": "value2", 
    "field_array": [ 
    {"sub_field_1": "sub_val_1", "sub_field_2": "sub_val_2"}, 
    {"sub_field_1": "sub_val_1", "sub_field_2": "sub_val_2"}, 
    {"sub_field_1": "sub_val_1", "sub_field_2": "sub_val_2"} 
    ] 
} 

Ниже mongoexport команда

mongoexport -d db_name -c collection_name -q '{"field_array.sub_field_1": {$gte: "some_value_1", $lt: "some_value_2"}}' -fieldFile fields.txt --csv > data_report.csv 

где fields.txt имеет ниже содержание

field_array.sub_field_1 
field_array.sub_field_2 

получить данные, как показано ниже в CSV т.е. пустые поля.

field_array.sub_field_1,field_array.sub_field_2 
, 

Однако, если указать значение индекса в fields.txt, как показано ниже

field_array.0.sub_field_1 
field_array.0.sub_field_2 

тогда, я получаю следующие данные

field_array.sub_field_1,field_array.sub_field_2 
sub_val_1,sub_val_1 

т.е. только один объект в field_array возвращается но не все. Но, что мне нужно, как показано ниже

field_array.sub_field_1,field_array.sub_field_2 
sub_val_1,sub_val_1 
sub_val_2,sub_val_2 

т.е., все объекты в field_array.

Любая помощь?

+0

Вы можете запустить агрегатный запрос на ваши документы, а затем поместить все данные, присутствующие в field_array на новую коллекцию, используя $ из агрегата. Тогда вам легко экспортировать документы. Проверьте эту ссылку. http://docs.mongodb.org/manual/reference/operator/aggregation/out/ – mallik

ответ

1

Похоже, что mongoexport не может экспортировать все элементы массива, если вы не указали их все по индексу один за другим. Конечно, это нереально.
Итак, вы можете разделить массив и сохранить данные во временную коллекцию, а затем экспортировать из этой новой коллекции.

db.collection_name.aggregate([ { 
    $match : { 
     "field_array.sub_field_1" : { 
      $gte : "some_value_1", 
      $lt : "some_value_2" 
     } 
    } 
}, { 
    $project : { 
     _id : 0, 
     field_array : 1 
    } 
}, { 
    $unwind : "$field_array" 
}, { 
    $out : "forcsv" 
} ]); 

mongoexport -d db_name -c forcsv --fieldFile fields.txt --csv > data_report.csv 
+0

Импорт разделенной коллекции не работает, потому что невозможно добавить документы с тем же _id. – DistribuzioneGaussiana

7

MongoExport

Чтобы экспортировать свойство, значение которого является массив объектов, то раскручивать массив, чтобы сделать один документ и хранить в новой коллекции затем экспортировать эту коллекцию.

Например

База данных: аЬс коллекция: хуг

db.xyz.aggregate([ 
    {$unwind: "$field_array"}, 
    {$project: { _id:0,field_id:"$_id",Innerfield: "$field_array", "field_1": 1,"field_2":1}}, 
    {$out: "aggregate_xyz"} 
]) 

MongoExport Синтаксис

mongoexport --host <hostname> --db <Database Name> --collection <collection Name> --csv --fields fieldname1,fieldname2 --out fileName.csv 

Пример: Экспорт в формате CSV

mongoexport --host localhost --db abc --collection aggregate_xyz --csv --fields field_id,field_1,field_2,Innerfield.sub_field_1,Innerfield.sub_field_2 --out important.csv 

Пример: Экспорт в формате JSON

mongoexport --host localhost --db abc --collection aggregate_xyz --fields field_id,field_1,field_2,Innerfield.sub_field_1,Innerfield.sub_field_2 --out important.json 

Чтобы узнать больше, пожалуйста, посетите

$ размотать

https://docs.mongodb.org/v3.0/reference/operator/aggregation/unwind/

$ из

https://docs.mongodb.org/v3.0/reference/operator/aggregation/out/

$ Проект

https://docs.mongodb.org/v3.0/reference/operator/aggregation/project/