我试图从子文档中导出一个没有运气的字段 这是我的语法;
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
似乎已删除了直接引用子文档的支持。
答案 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}`); });