Search code examples
javascriptmongodbmeteorinsertobjectid

How to add binary data with objectId to mongoDB?


I need to insert a document into a collection, which has an ObjectId and a BinData value. Therefore I don't know how to insert it.

With this code I get the error TypeError: Cannot read property 'ObjectId' of undefined.

server/fixtures.js

var ObjectId = Mongo.ObjectID;
var chunk = {
            "_id"     : ObjectId("57a9be3c89c1e4b50c574e3a"),
            "files_id": ObjectId("5113b0062be53b231f9dbc11"),
            "n"       : 0,
            "data"    : BinData(0, "/9j/4AAQSkZJRgA...and...so...on../2Q==")
        };

db.mediafiles.chunks.insert(chunk);

Update

I'm using Meteor

Therefore I can use var ObjectId = Meteor.Collection.ObjectID;. But how do I get the BinData?

ReferenceError: BinData is not defined


Solution

  • Stumbled upon this today as well.

    As the other answer mentioned you can use ObjectID and Binary provided by the MongoDB driver. The issue I had was that the binary data was not what I expected after inserting and this is due to the inner workings of the Binary function. It requires either an unencoded string or a buffer, which can be initialized from base64 encoded content like this:

    const { Binary, ObjectID } = require('mongodb')
    
    async function run() {
      // Configure MongoDB connection
      const client = new MongoClient()
    
      // Connect to MongoDB
      await client.connect(...)
    
      try {
        // Insert data using base64 encoded content and 
        // both ObjectID and Binary from mongodb package
        await client.db().mediafiles.chunks.insert({
          _id: ObjectID('57a9be3c89c1e4b50c574e3a'),
          files_id: ObjectID('5113b0062be53b231f9dbc11'),
          n: 0,
          data: Binary(Buffer.from('/9j/4AAQSkZJRgA...and...so...on../2Q==', 'base64')),
        })
      } finally {
        // Close client if it was opened
        await client.close()
      }
    }