我在MongoDB数据库中有一些文档。
我想将这些文档导出并打印为csv文件。
一些文档有嵌套的对象,所以我想我必须首先操作它们。
所以一个文档可以是
{
name: {
english: "English Name",
spanish: "Spanish name"
},
subdocuments: [
{
quantity: 100,
price: 20
},
{
quantity: 200,
price: 30
},
]
}我想最好的解决方案是将这个对象打印成两行:
English Name, Spanish Name, Quantity, Price
===========================================
English Name, Spanish Name, 100, 20
English Name, Spanish Name, 200, 30那么我该怎么做呢?最好是使用写到csv的Node.js包吗?
我想我需要用以下命令检索文档
const rows = [];
Collection.find({}).then(docs => {
docs.forEach(doc => {
doc.subdocuments.forEach(subdocument => {
rows.push({ 'English Name': doc.name.english, 'Spanish Name': doc.name.spanish, quantity: subdocument.quantity, price: subdocument.price });
});
});
});但是使用这种方法,如果文档包含子文档,我将只得到一行,所以如果subdocuments数组为空,我也对一行感兴趣--只是数量和价格列为空。
当我有了这个对象数组时,我想把它写到一个csv文件中,这可能非常简单,所以我想最好是这样做
var csv = '';
// headers
csv += 'English Name, Spanish Name, Quantity, Price\n';
rows.forEach(row => {
csv += row['Spanish Name'] + ', ' + row['English Name'] + ', ' + row.quantity + ', ' + row.price + '\n';
});但这真的是正确的方法吗?如何确保用户将其作为csv文件下载?文本还可以包含特殊字符(例如ö、ä等)。我在Node.js中使用Express
发布于 2017-03-10 06:56:20
有关空子文档的问题,可以通过将代码更改为:
const rows = [];
Collection.find({}).then(docs => {
docs.forEach(doc => {
if(doc.subdocuments.length === 0)
rows.push({ 'English Name': doc.name.english, 'Spanish Name': doc.name.spanish, quantity: 0, price: 0 });
doc.subdocuments.forEach(subdocument => {
rows.push({ 'English Name': doc.name.english, 'Spanish Name': doc.name.spanish, quantity: subdocument.quantity, price: subdocument.price });
});
});
});稍后,您可以使用例如json2csv将其转换为csv
https://stackoverflow.com/questions/42706801
复制相似问题