7

私はフォーラムを検索し、同様の問題を抱えている多くの人々を見てきましたが、これとまったく同じ問題ではありません.

私の質問は最も単純な形式だと思います。誰も質問していないので、私が見逃しているものがあるに違いありません。

MongoDB スクリプトを呼び出して結果をファイルに取得するシェル スクリプトがあります。次に、そのファイルを jq で解析します。

クエリからの出力が有効な JSON ではないため、jq が壊れています。違反者は ObjectId です。「ALL JSON ALL THE TIME」が無効なJSONをどのように生成するかについて、私は完全に途方に暮れています。

私が見逃している基本的な何かがあると確信しています。

MyMongoScript.js というファイルがあります。その内容は次のようになります。

db.WorkflowJobs.find().sort({"STATUS":1}).forEach(printjson)

次のコマンドで MyMongScript.js を呼び出します。

mongo -u $MONGO_U -p $MONGO_P $MONGO_DB -quiet --eval "var DATE_TO_RUN=\"$DATE_TO_RUN\"" MyMongoScript.js  

STDOUT への結果は次のとおりです。

{
"_id" : ObjectId("52816fd50bc9efc3e6d8e33f"),
"WORK_TYPE" : "HIVE",
"Script_Name" : "upload_metrics_LANDING_to_HIST.sql",
"Stop_On_Fail" : true,
"STATUS" : "READY",
"START_TS" : "NULL",
"END_TS" : "NULL",
"DURATION" : "NULL",
"INS_TS" : "Mon Nov 11 2013 16:01:25 GMT-0800 (PST)"
}

jsonlint.com がそれについて言っていることは次のとおりです。

Parse error on line 2:
{    "_id": ObjectId("52816fd50b
------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['

どんな助けでも大歓迎です。

4

1 に答える 1

5

MyMongoScript.js でこれを試してください。

db.WorkflowJobs.find().sort({"STATUS":1}).forEach(function(myDoc){myDoc._id=myDoc._id.valueOf();print(tojson(myDoc))});

重要なのはvalueOf()、ObjectId を文字列に設定することです。

EDITED 括弧を省略しました。

于 2013-11-12T23:58:56.617 に答える