@mongodb-js/compass-import-export

Compass Import/Export Plugin

Usage no npm install needed!

<script type="module">
  import mongodbJsCompassImportExport from 'https://cdn.skypack.dev/@mongodb-js/compass-import-export';
</script>

README

Compass Import/Export Plugin

mongoimport and mongoexport functionality in Compass.

Development

After cloning this repository and running npm install, you can try this plugin with a real MongoDB Server in electron by running:

DEBUG=mongo* npm start

Testing

npm test

Import Test Cases

See files in the ./test directory.

TODO/Ideas

  • Import: Move away from state.fields being array of objects to using all array's of strings. For now, there is some duplication of fields+transforms+excludes we'll come back to and fixup.
  • import-apply-type-and-projection supports nested dotnotation and only uses state.importData.transforms
  • Import and Export: New Option: If you need to specify extended-json legacy spec
  • Import: bson-csv: support dotnotation expanded from . .<bson_type>() caster like mongoimport does today
  • Import: Preview Table: Use highlight.js, mongodb-ace-mode, or something so the text style of the value within a cell matches its destination type
  • Export: Use electron add to destination file to recent documents
  • Import and Export: Show system notification when operation completes. like dropbox screenshot message. toast "XX/XX documents successfully"
  • Import: expose finer-grained bulk op results in progress -> "View Import Log File"
  • Import: New Option: drop target collection before import
  • Import: New Option: define import mode: insert, upsert, merge
  • Import: New Option: specify a different path for _id such as business_id in the yelp dataset
  • Import: Option for path to pass to JSONStream for nested docs (e.g. results array when fetching JSON from a rest api)
  • Import: New Option: Paste URL to fetch from
  • Import: Preview Table: use react-table and react-window for fixed headers and more # of documents to preview
  • Import: Preview Table: Allow transpose on fields/values so all type selection and projection is in a single left aligned list
  • Import: Multi file import via archive (supports gzip/zip/bzip2/etc.)
  • Import: Use schema parser or something later to handle complete tabular renderings of sparse/polymorphic
  • Import: Improve import-size-guesstimator
  • Import: guess delimiter in src/utils/detect-import-file.js
  • Import and Export: Extract anything from ./src/utils that could live as standalone modules so other things like say a cli or a different platform could reuse compass' import/export business logic and perf.
  • Refactor src/modules/ so import and export reuse a common base