首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Mongoose文档写入csv文件

将Mongoose文档写入csv文件
EN

Stack Overflow用户
提问于 2017-03-10 06:33:24
回答 1查看 618关注 0票数 0

我在MongoDB数据库中有一些文档。

我想将这些文档导出并打印为csv文件。

一些文档有嵌套的对象,所以我想我必须首先操作它们。

所以一个文档可以是

代码语言:javascript
复制
{
  name: {
    english: "English Name",
    spanish: "Spanish name"
  },
  subdocuments: [
    {
      quantity: 100,
      price: 20
    },
    {
      quantity: 200,
      price: 30
    },
  ]
}

我想最好的解决方案是将这个对象打印成两行:

代码语言:javascript
复制
English Name, Spanish Name, Quantity, Price
===========================================
English Name, Spanish Name, 100, 20
English Name, Spanish Name, 200, 30

那么我该怎么做呢?最好是使用写到csv的Node.js包吗?

我想我需要用以下命令检索文档

代码语言:javascript
复制
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文件中,这可能非常简单,所以我想最好是这样做

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2017-03-10 06:56:20

有关空子文档的问题,可以通过将代码更改为:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42706801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档