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
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()
}
}