从子文档到csv的mongoexport字段

时间:2015-06-17 22:08:52

标签: mongodb

我试图从子文档中导出一个没有运气的字段 这是我的语法;

mongoexport -d test -c accounts -f account_number,situses.coordinates -o coordinates.csv --type=csv  

输出包括account_number但不包含子文档中的坐标字段。 根据{{​​3}},这应该有效。

以下将导出整个situses子文档,但我只想要一个字段。

mongoexport -d test -c accounts -f account_number,situses -o coordinates.csv --type=csv

我只是引用了子文档字段错误或什么?

我正在运行Mongodb 3.0.4

附加信息

以下语法适用于早期版本的Mongodb(2.6.x?)。请注意subdoc.0.fieldname语法。

mongoexport -d test -c accounts -f account_number,situses.0.coordinates -o coordinates.csv --csv  

似乎已删除了直接引用子文档的支持。

3 个答案:

答案 0 :(得分:6)

你的语法有误。

  

从mongo 3.0.0版本开始,mongoexport删除了--type = csv选项。使用--type = csv选项为输出指定CSV格式。

您应该使用:

mongoexport --db tests --collection accounts --type=csv --fields account_number,situses --out coordinates.csv

对于嵌套字段,您应该使用:

mongoexport --db tests --collection accounts --csv --fields 'account_number,situses.0.coordinates'  --out /home/vishwas/c1.csv 

使用子文档编辑mongo 3.0:

您需要使用 -

等子文档中的必填字段创建单独的集合
db.test.aggregate({"$unwind":"$situses"},{"$project":{"_id":0,"account_number":1,"siteUsesCo":"$situses.coordinates"}},{"$out" : "forcsv"}) 

如果您希望子文档中只有一个字段,请使用聚合 -

db.test.aggregate({"$unwind":"$situses"},{"$limit":1},{"$project":{"_id":0,"account_number":1,"siteUsesCo":"$situses.coordinates"}},{"$out" : "forcsv"})

然后从forcsv集合中导出,如 -

mongoexport --db test --collection forcsv --csv --fields 'account_number,siteUsesCo'  --out coordinates.csv

导出删除集合forcsv后。

答案 1 :(得分:0)

看起来这是一个已知的错误,需要在3.0.5中修复 看到这个; https://jira.mongodb.org/browse/TOOLS-657

答案 2 :(得分:0)

还有另一种解决方案,您可以在其中灵活配置输出

mongo host:port/test --quiet query.js -u username -p passw0rd > accounts.csv

和query.js:

db = db.getSiblingDB('test');

db.getCollection('accounts').find({}, {account_number:1, situses:1, _id:0}).forEach(
    function(item_data) { print(`${item_data.account_number},${item_data.situses[0].coordinates}`); });