Как экспортировать данные из MongoDB в CSV

MongoDB неплохо справляется с задачей хранения огромных коллекций неструктурированных данных. Иначе говоря, если вы не можете описать структуру своих данных и не знаете как она изменится в будущем, но можете эти данные отобразить в json-формате, то mongo справится с задачей хранения schemaless данных.

Однако, большое количество документов в json-формате достаточно трудно отобразить в удобном для человека виде. Для экспорта простых отчётов их монги можно написать небольшой скрипт:

print("id,name,city");
db.collection.find({
 "location.country": "anything"
}, {
 "id": 1,
 "name": 1,
 "location.city": 1
}).forEach(function(item) {
 if(typeof item.location === "undefined") {
   city = "";
 } else {
   city = item.location.city;
 }
 print(item.id + "," + item.name + "," + city );
});

И выполнить его в MongoDB таким способом:

mongo database export.js > out.csv

Поясню по скрипту:

  • в первой строке выводим заголовки столбцов в CSV формате
  • затем фильтруем (find) коллекцию (db.collection) по полю (location.country)
  • перечисляем имена полей («id»: 1) которые нужно извлечь из документов
  • если в документе не определено поле (typeof item.location === «undefined»), задать ему значение по-умолчанию
  • формируем строку со значениями через запятую в CSV формате