You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MongoDB中按字段查询并仅导出指定字段到CSV

解决MongoDB查询指定字段并导出CSV的问题

问题描述

需要按companyurl字段查询所有MongoDB文档,并仅将companyurl字段的值导出到CSV文件,但当前代码会导出文档的所有字段,想了解如何在find操作中选择性查询指定字段。

文档结构

_id: ObjectId('63462fd9e52e05829198d5a2')
company:"google"
companyurl:"facebook.com"
__v:0

_id: ObjectId('63462fd9e52e05829198d5a2')
company:"google"
companyurl:"amazon.com"
__v:0

_id: ObjectId('63462fd9e52e05829198d5a2')
company:"google"
companyurl:"stackoverflow.com"
__v:0

_id: ObjectId('63462fd9e52e05829198d5a2')
company:"google"
companyurl:"instagram.com"
__v:0

当前代码

mongodb.connect(
 url,
 { useNewUrlParser: true, useUnifiedTopology: true },
  (err, client) => {
   if (err) throw err;

client
  .db("mernapp")
  .collection("scrapeds")
  .find({})
  .toArray((err, data) => {
    if (err) throw err;

    console.log(data);
    const json2csvParser = new Json2csvParser({ header: true });
    const csvData = json2csvParser.parse(data);

    fs.writeFile("bezkoder_mongodb_fs.csv", csvData, function(error) {
      if (error) throw error;
      console.log("Write to bezkoder_mongodb_fs.csv successfully!");
    });

    client.close();
  });
 }
);

解决方案

MongoDB的find()方法支持**投影(Projection)**参数,用来指定只返回需要的字段,同时结合json2csv的配置可以精准导出目标字段,以下是两种常用实现方式:

方式一:通过MongoDB投影只返回指定字段

在find()的第二个参数中设置投影规则,指定要保留的字段(值设为1),_id字段默认会被返回,需要显式设为0去除:

mongodb.connect(
 url,
 { useNewUrlParser: true, useUnifiedTopology: true },
  (err, client) => {
   if (err) throw err;

client
  .db("mernapp")
  .collection("scrapeds")
  // 投影配置:仅返回companyurl,排除_id
  .find({}, { companyurl: 1, _id: 0 })
  .toArray((err, data) => {
    if (err) throw err;

    console.log(data);
    const json2csvParser = new Json2csvParser({ header: true });
    const csvData = json2csvParser.parse(data);

    fs.writeFile("bezkoder_mongodb_fs.csv", csvData, function(error) {
      if (error) throw error;
      console.log("Write to bezkoder_mongodb_fs.csv successfully!");
    });

    client.close();
  });
 }
);

方式二:通过json2csv指定导出字段

如果不想修改MongoDB的查询结果,也可以直接在json2csv的配置中指定要导出的字段,过滤掉多余内容:

mongodb.connect(
 url,
 { useNewUrlParser: true, useUnifiedTopology: true },
  (err, client) => {
   if (err) throw err;

client
  .db("mernapp")
  .collection("scrapeds")
  .find({})
  .toArray((err, data) => {
    if (err) throw err;

    console.log(data);
    // 配置仅导出companyurl字段
    const json2csvParser = new Json2csvParser({ fields: ['companyurl'], header: true });
    const csvData = json2csvParser.parse(data);

    fs.writeFile("bezkoder_mongodb_fs.csv", csvData, function(error) {
      if (error) throw error;
      console.log("Write to bezkoder_mongodb_fs.csv successfully!");
    });

    client.close();
  });
 }
);

推荐方案

优先选择方式一,因为MongoDB只返回需要的字段,减少了数据传输量,提升查询效率,后续数据处理也更简洁。


内容的提问来源于stack exchange,提问作者queshy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 12:45:47