OmniSelect FileSQL

Guides
← Back to App
Home › Guides › Opening a BSON dump without MongoDB

Open a MongoDB .bson Dump Without MongoDB Installed

mongodump writes one .bson file per collection — not JSON, and not something a text editor or Excel can open. The usual fix is standing up a MongoDB server just to run mongorestore, or writing a script with a BSON library. This is how to query the file directly, with neither.

What's Actually In a .bson File

It is not one document: it is many BSON documents written back to back, each starting with its own length in bytes. That is the whole format — no header, no index, no schema. A reader just has to walk the file, one length-prefixed document at a time.

Usual routeWhat it costs
mongorestore + mongoshA MongoDB server, even a temporary one, just to look inside a file
A Python/Node scriptInstall a BSON library, write a loop, decide what to do with ObjectIds and dates yourself
An online BSON viewerThe dump — often customer or account data — uploaded to someone else's server

Doing It in the Browser

OmniSelect FileSQL reads .bson files with the same bson library MongoDB's own drivers use, inside your browser tab. Nothing is uploaded.

  1. Open the app.
  2. Drop the file onto the File Select panel. A collection dumped as customers.bson becomes a table named by its first letter, C, shown in the Alias column.
  3. Look at it.
    SELECT * FROM C
_idnameemailjoinedplantagsaddress_cityaddress_countrylifetime_value
000000000000000000000001Acme Ltdops@acme.example2023-03-14enterprisevip,renewedAustinUS48250.5
000000000000000000000002Borden Grouphello@borden.example2024-01-09pronewsletterDenverUS9120
000000000000000000000003Castle Coinfo@castle.example2024-06-30pronewsletter,betaBostonUS15400.75
000000000000000000000004Delta Partnersteam@delta.example2025-02-18freeSeattleCA0

Four BSON-specific things happened before that table appeared:

Joining by ObjectId

An orders collection dumped alongside it, orders.bson (table O), references each customer by that same ObjectId. Once it's text, it joins exactly like any foreign key:

SELECT C.name, COUNT(*) AS orders, SUM(O.amount) AS total_amount
FROM O
JOIN C ON O.customer_id = C._id
GROUP BY C.name
ORDER BY total_amount DESC
nameorderstotal_amount
Acme Ltd215200
Borden Group1890
Castle Co2790
💡 Delta Partners has no orders yet, so an inner JOIN leaves it out — correct behaviour, not a sign that its file failed to load. A LEFT JOIN would keep it, with blank order columns; see the four reasons a join comes back empty.

Drop a mongodump .bson file in and see inside it.

Open the app →

What Else Happens to BSON's Own Types

BSON has several types JSON does not. Each becomes something you can filter and sort on rather than an opaque blob:

What's Not Supported

Reasonable Questions

Do I need mongoexport instead?

mongoexport writes JSON, which this app already reads — either works, but .bson keeps every BSON type (ObjectIds, dates, longs) exactly as MongoDB stored it, where mongoexport's JSON has already converted some of them.

Can I read more than one collection at once?

Yes. Load every .bson file mongodump wrote for a database, and join across collections the way customers.bson and orders.bson are joined above — see querying up to twenty-six files at once.

What about GridFS files?

GridFS stores a file's bytes split across many small chunk documents in fs.chunks, which is not something a table of rows is the right shape for. Metadata in fs.files opens and queries normally.

Does anything leave my machine?

No. The BSON reader runs in the tab, and after the page has loaded it makes no network requests — here is how to check.

Related Guides