docs.sheetjs.com/docz/docs/03-demos/07-data/25-mongodb.md

131 lines
3.5 KiB
Markdown
Raw Normal View History

2023-02-24 07:46:48 +00:00
---
title: MongoDB
2023-02-28 11:40:44 +00:00
pagination_prev: demos/desktop/index
pagination_next: demos/local/index
2023-02-24 07:46:48 +00:00
sidebar_custom_props:
type: document
---
2023-04-27 09:12:19 +00:00
import current from '/version.js';
2023-04-29 11:21:37 +00:00
import CodeBlock from '@theme/CodeBlock';
2023-04-27 09:12:19 +00:00
2023-02-24 07:46:48 +00:00
MongoDB is a popular document-oriented database engine.
It is straightforward to treat collections as worksheets. Each object maps to
a row in the table.
## Integration Details
The official NodeJS connector is `mongodb`.
#### Importing Data
Data stored in an array of objects can be added to MongoDB Collections using
`Collection#insertMany`. `sheet_to_json` can generate data from worksheets:
```js
/* import data from a worksheet to a collection */
const aoo = XLSX.utils.sheet_to_json(ws);
await collection.insertMany(aoo, {ordered: true});
```
#### Exporting Data
`Collection#find` can pull an array of objects from a Mongo Collection.
Normally the method adds a `_id` field to each object. The recommended way to
remove the field is to use a `projection` to suppress the ID:
```js
/* generate an array of objects from a collection */
const aoo = await collection.find({}, {projection:{_id:0}}).toArray();
```
Worksheets can be generated from the result using `json_to_sheet`:
```js
/* generate a worksheet from a collection */
const aoo = await collection.find({}, {projection:{_id:0}}).toArray();
const ws = utils.json_to_sheet(aoo);
```
## Complete Example
:::note
This demo was last tested on 2023 February 23 with MongoDB CE 6.0.4, MongoDB
connector module 5.1.0 and NodeJS 18.14.2.
:::
0) Install MongoDB 6.0 Community Edition. The macOS steps required `brew`:
```bash
brew tap mongodb/brew
brew update
brew install mongodb-community@6.0
```
1) Start a MongoDB server on `localhost` (follow official instructions). To run
in the foreground on Intel MacOS:
```bash
/usr/local/opt/mongodb-community/bin/mongod --config /usr/local/etc/mongod.conf
```
2) Create base project and install the dependencies:
2023-04-29 11:21:37 +00:00
<CodeBlock language="bash">{`\
2023-02-24 07:46:48 +00:00
mkdir sheetjs-mongo
cd sheetjs-mongo
npm init -y
2023-04-29 11:21:37 +00:00
npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz mongodb@5.1.0`}
</CodeBlock>
2023-02-24 07:46:48 +00:00
3) Save the following to `SheetJSMongoCRUD.mjs` (the key step is highlighted):
```js title="SheetJSMongoCRUD.mjs"
import { writeFile, set_fs, utils } from 'xlsx';
import * as fs from 'fs'; set_fs(fs);
import { MongoClient } from 'mongodb';
const url = 'mongodb://localhost:27017/sheetjs';
const db_name = 'sheetjs';
/* Connect to mongodb server */
const client = await MongoClient.connect(url, { useUnifiedTopology: true });
/* Sample data table */
const db = client.db(db_name);
try { await db.collection('pres').drop(); } catch(e) {}
const pres = db.collection('pres');
await pres.insertMany([
{ name: "Barack Obama", idx: 44 },
{ name: "Donald Trump", idx: 45 },
{ name: "Joseph Biden", idx: 46 }
], {ordered: true});
// highlight-start
/* Create worksheet from collection */
const aoo = await pres.find({}, {projection:{_id:0}}).toArray();
const ws = utils.json_to_sheet(aoo);
// highlight-end
/* Export to XLSX */
const wb = utils.book_new();
utils.book_append_sheet(wb, ws, "Presidents");
writeFile(wb, "SheetJSMongoCRUD.xlsx");
/* Close connection */
client.close();
```
This script:
- connects to the local MongoDB server using database `sheetjs`
- removes the `pres` collection if it already exists
- creates a new collection `pres` with sample data
- creates a SheetJS worksheet from the collection (highlighted in the snippet)
- creates a SheetJS workbook, adds the worksheet, and exports to XLSX
4) Run `node SheetJSMongoCRUD.mjs` and open `SheetJSMongoCRUD.xlsx`