2016-07-18 5 views
0

mongoexportは、興味のあるフィールドが明示的に指定されている場合、不要な兄弟をエクスポートしているようです。私はmongo-2.6mongo-3.0.2mongo-3.2.8でこれを試しましたが、すべて同じ動作を表しています。例えばmongoexportは、ドキュメントツリー内の不要な兄弟をエクスポートします。

./mongoexport --host my.mongo.host:10099 --db mydb --collection mycoll --fields myfield --query '{"some.attribute.filter":"some-attribute-value"}' --limit 1 --out /tmp/myexport.json 

これはmyfieldための全体JSONをエクスポート。

./mongoexport --host my.mongo.host:10099 --db mydb --collection mycoll --fields myfield.desiredSubField --query '{"some.attribute.filter":"some-attribute-value"}' --limit 1 --out /tmp/myexport.json 

これも単なるネストされたフィールドmyfield.desiredSubFieldを輸出するのではなく、myfieldのための全体JSONをエクスポートします。

興味深いことに、--type=csvの場合も同様です。しかし、私はJSONの出力に興味があります。

この動作は仕様ですか、何か間違っていますか? これは仕様による場合、他の選択肢がありますか?

答えて

1

この動作は仕様ですか、何か間違っていますか?

はい、これは、https://docs.mongodb.com/manual/reference/program/mongoexport/#cmdoption--fieldsに記載されているように設計されています。 --fieldsは、トップレベルフィールド抽出のみをサポートしています。

これは仕様ですが、これ以外の方法がありますか?考慮すべき

代替が含まれる:

  • はMongoDBのを使用してプログラムデータを抽出ドライバをサポート。 https://docs.mongodb.com/manual/reference/operator/aggregation/project/#include-computed-fields

  • に記載計算フィールドの$プロジェクトを適用することにより、サブフィールドの名前を変更することができどこエクスポートする新しいコレクションを作成するために、集約を使用して

  • (詳細についてはdocs.mongodb.com/ecosystem/drivers/を参照してください)ここ

は、凝集するための一例である:testrc collectioとMongoのシェルで

db.coll.aggregate([ 
     {$match : {"some.attribute.filter":"some-attribute-value"}}, 
     {$project : {"new-field-name":"$myfield.desiredSubField", _id:0 }}, 
     {$out : "new-collection-name"} 
]) 

nは新しいネストされたコレクション

> db.testrc.find() 
{ "_id" : ObjectId("578d1ac48c3757a609a36286"), "a" : { "b" : 3 }, "b" : { "a" : 3 }, "c" : { "a" : 1 } } 
{ "_id" : ObjectId("578fc7faed1d015678b0252a"), "a" : { "b" : 3, "c" : 10, "d" : 11 }, "b" : { "a" : 3, "c" : 10, "d" : 11 }, "c" : { "a" : 1 } } 

> db.testrc.aggregate([{$match:{"b.a":{$gte:0}}},{$project : {"b_a":"$b.a", _id:0 }}, {$out :"nested"}]) 

> db.nested.find() 
{ "_id" : ObjectId("578fc8ad1ecfad36cde071c9"), "b_a" : 3 } 
{ "_id" : ObjectId("578fc8ad1ecfad36cde071ca"), "b_a" : 3 } 

、その後

$ mongoexport --db testr --collection nested --fields b_a --out ba.json 

まだ "_id" フィールドが含まれていますが、もはや兄弟や親を示し
$ cat ba.json 
{"_id":{"$oid":"578fc8ad1ecfad36cde071c9"},"b_a":3.0} 
{"_id":{"$oid":"578fc8ad1ecfad36cde071ca"},"b_a":3.0} 

につながる作成ドキュメント。

関連する問題