2014-11-19 5 views
0

Вдохновленные этот вопрос в сервере Fault https://serverfault.com/questions/459042/mongoexport-csv-output-array-valuesmongoexport выход CSV последний массив значений,

Я использую mongoexport экспортировать некоторые коллекции Into CSV файлов, однако при попытке целевых полей, которые являются последними членами массив, я не могу правильно его экспортировать.

Command Я использую

mongoexport -d db -c collection -fieldFile fields.txt --csv > out.csv 

один предмет моей коллекции:

{ 
    "id": 1, 
    "name": "example", 
    "date": [ 
     {"date": ""}, 
     {"date": ""}, 
    ], 
    "status": [ 
     "true", 
     "false", 
    ], 
} 

я могу получить доступ к первого члена моего массива написания полей, как в следующем

name 
id 
date.0.date 
status.0 

Есть ли способ преодолеть последний элемент моего массива, не зная длины массива?

Поскольку следующий не работает:

name 
id 
date.-1.date 
status.-1 

Любая идея правильной записи? Или, если это просто невозможно?

ответ

1

Невозможно ссылаться на последний элемент массива, не зная длины массива, так как обозначение array_field.index, где индекс находится в [0, length - 1]. Вы можете использовать структуру агрегации для создания представления данных, которые вы хотите экспортировать, временно сохранить в коллекции с помощью $ out, а затем mongoexport. Например, для документов, которые вы могли бы сделать

db.collection.aggregate([ 
    { "$unwind" : "$date" }, 
    { "$group" : { "_id" : "$_id", "date" : { "$last" : "$date" } } }, 
    { "$out" : "temp-for-csv" } 
]) 

для того, чтобы получить только последнюю дату каждого документа и выводит его в коллекцию ТЕМП-для-CSV.

Вы можете вернуть только последний элемент в массиве с оператором $slice проекции, но это не доступно в агрегации и mongoexport принимает только спецификацию запроса, а не спецификацию проекции, так как --fields и --fieldFile вариант предполагается достаточно. Возможно, это хороший запрос функции, чтобы попросить использовать запрос с проекцией для mongoexport.

+0

Спасибо за этот ответ yep, который может быть хорошим фетартом для запроса, потому что я хотел избежать скриптов больше juste, используя поля, должен быть полезен сам по себе – c24b

+0

невозможен, тогда без агрегата – c24b

Смежные вопросы