2017-03-19 12 views
0

書籍に関するデータをAmazon APIから取得し、JSONオブジェクトとして保存しています。このデータをMeteorコレクションに挿入したいと考えています。ただし、JSONデータの一部のフィールドは "$"文字で始まり、このエラーにつながります。

MongoError: 'result.results.0.ItemAttributes.0'の$($)接頭辞フィールド '$'。 ManufacturerMaximumAge.0。$ 'は格納に有効ではありません。

データに "$"記号が含まれている場合は、コレクションにデータを挿入するのに役立ちます。これが不可能な場合は、JSONデータ内のすべての "$"を削除し、それをMeteorコレクションに格納する方法がありますか? ここではアマゾンのAPIを検索し、最初の10件の結果に関する情報を返しますブックのタイトルと著者与えられた私のコード、次のとおりです。これはJSONデータである

Meteor.methods({ 
    itemSearch(appUUID,title, author) { 
     var result = {}; 
     result.search = { 
      appUUID: appUUID, 
      title: title, 
      author: author 
     } 
     client.itemSearch({ 
      title: title, 
      author: author, 
      searchIndex: 'Books',   
      responseGroup: 'ItemAttributes, Images' 
     }).then(function(results){ 
      result.results = results; 
      var upsertResult = SearchResult.upsert({ 
       appUUID: appUUID, 
       title: title, 
       author: author, 
      }, 
      { 
       $set: {result: result} 
      } 
      ); 
     }).catch(function(err){ 
        SearchResult.upsert({ 
        appUUID: appUUID, 
        title: title, 
        author: author, 
       },  
       { 
        $set: {result: result } 
       } 
      ); 
     }); 

    } 
}); 

(のSearchResultは、コレクションへの参照である)、および「単位」の前のドル記号が問題の原因となっています。

"Width": [ 
     { 
     "_": "810", 
     "$": { 
      "Units": "hundredths-inches" 
      } 
     } 
] 

答えて

1

簡単な答えはありません、あなたは(the docsから)にMongoDBのフィールドで$を使用することはできません、次のとおりです。

The field names cannot start with the dollar sign ($) character.

のMongoDBが受け入れることができる形式にデータを変更するには多くの可能な解決策があります私が考えることができる最も単純なソリューションを提供するために、オブジェクトのキーをマップするだけで済みます。例えば、lodash's mapKeys functionで:

data = _.mapKeys(data, (value, key) => { 
    if(key === '$') { 
    return 'some_custom_key' 
    } else { 
    return key 
    } 
}) 

これは、すべてあなたの$some_custom_keyにを変更します。 Mongooseの前のsaveミドルウェアや投稿readミドルウェア(docsなど)は、あなたのためにこれを変換することができるフックを持っている限り、いくらか実行可能な解決策でなければなりません。

私はそれが可能かどうかわかりませんが、より良い解決策は、$のないデータをAmazon APIに渡すことですが、私はそのAPIに慣れていないので推測できません。

+1

こんにちは、遅れて申し訳ありません。私はこれを試して、あなたに戻ってきます。速やかなご返信ありがとうございます! – Zorrow2008

+1

ありがとう、私はlodashとその良いを使用しています。 – Zorrow2008

関連する問題