2017-12-13 26 views
2

新しいヘッドレスCMSサニティ(www.sanity.io)の無料版を探しているホビープログラマーです。CSVをsanity.ioにインポートする方法

プロジェクトにデータをアップロード/インポートしようとすると問題が発生する:csvファイルからデータをインポートする方法はありますか?ドキュメントの例はjsonファイルのみを説明しています:https://www.sanity.io/docs/content-studio/importing-data

私のプロジェクトを説明する代わりに、バンドルされた映画スタジオを例に挙げてみましょう:Film Studioが映画を作った情報のレイヤーを追加したいとします。私は名前、国、ウェブページ、CEO、映画であるスタジオのリストを持つCSVファイルを持っています。最終版はそのスタジオの映画の名前を持つ配列です。このCSVをインポートしてスタジオ、スタジオのリストが作成される新しいコンテンツタイプ、ムービー配列がテキストではなく参照である場所を作成します。

誰でも私がヒットしたことについてどうすればいいのか理解できますか?

答えて

1

現在、データから直接CSVファイルからサニティにインポートする方法はありません。それでも、あなたが望むものを達成するのはかなり簡単です。

  • 改行区切りJSONファイル
  • インポートファイルに新しい文書を書く

    1. 解析CSVがあなたのスキーマと一致するように
    2. 構造着信データファイル:簡単に言えば、これはあなたがやりたいだろうしたいです

      :正気

    studios.csvという名前のCSVファイルは次のようになります言います0

    以下のコードではcsv-parserが使用されていますが、CSVを取得するために他のパッケージを使用したい場合は、その例として役立ちます。

    const csv = require('csv-parser') 
    const fs = require('fs') 
    const sanityClient = require('@sanity/client') 
    const client = sanityClient({ 
        projectId: 'my-project-id', 
        dataset: 'my-dataset', 
        useCdn: false 
    }) 
    
    function appendToFile(document) { 
        const docAsNewLineJson = `${JSON.stringify(document)}\n` 
        fs.appendFileSync('ready-for-import.ndjson', docAsNewLineJson, {flag: 'a+'}) 
    } 
    
    function moviesByTitles(titles) { 
        return client.fetch('*[_type == "movie" && title in $titles]', {titles: titles}) 
    } 
    
    fs.createReadStream('studios.csv') 
        .pipe(csv()) 
        .on('data', data => { 
        // Assuming movie titles are semi-colon separated 
        const titles = data.MOVIES.split(';') 
        // Fetch movies with these titles 
        moviesByTitles(titles).then(movies => { 
         // Build a Sanity document which matches your Studio type 
         const document = { 
         _type: 'studio', 
         name: data.NAME, 
         webPage: data.WEBPAGE, 
         movies: movies.map(movie => { 
          return { 
          _ref: movie._id, 
          _type: 'reference' 
          } 
         }) 
         } 
         // Append the document to a file for later import 
         appendToFile(document) 
        )} 
        }) 
    

    あなたが今あなたは、単にすることができ、インポートの準備ができて正気文書を含むファイルready-for-import.ndjsonになってしまいます:

    sanity dataset import ready-for-import.ndjson <my-dataset> 
    

    それ以外、ユニークで_idフィールドを含めることが有用であることが分かるかもしれません各スタジオでの無作為の価値、例えばstudio_${data.NAME.toLowerCase().replace(' ', '-')}。これにより、重複することなく文書を複数回(--replaceフラグを使用して)インポートすることができます。

  • 関連する問題