如何用objectId添加二进制数据到mongoDB

How to add binary data with objectId to mongoDB?

本文关键字:数据 mongoDB 二进制 添加 何用 objectId      更新时间:2023-09-26

我需要将一个文档插入到一个集合中,该集合具有一个ObjectId和一个BinData值。因此,我不知道如何插入。

使用此代码,我得到错误TypeError: Cannot read property 'ObjectId' of undefined

服务器/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);

我使用Meteor

因此我可以使用var ObjectId = Meteor.Collection.ObjectID;。但是我怎么得到BinData呢?

ReferenceError: BinData is not defined

今天也是偶然发现的。

正如提到的另一个答案,您可以使用MongoDB驱动程序提供的ObjectIDBinary。我遇到的问题是,二进制数据不是我所期望的插入后,这是由于Binary函数的内部工作。它需要一个未编码的字符串或一个缓冲区,可以从base64编码的内容初始化,如下所示:

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

下面是将数据插入集合的NodeJS代码。要回答你的问题,如果你正在使用NodeJS,你需要下面的语句。

var ObjectId = require('mongodb').ObjectID;

完整的NodeJS代码(假设你正在使用NodeJS):-

var Db = require('mongodb').Db, MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
var ObjectId = require('mongodb').ObjectID;
var bindata = new require('mongodb').Binary("ZzEudm1s");
var insertDocument = function(db, callback) {
    var chunk = {
        "_id" : new ObjectId("535e1b88e421ad3a443742e7"),
        "files_id" : new ObjectId("5113b0062be53b231f9dbc11"),
        "n" : 0,
        "data" : bindata
    };
    db.collection('Day1').insertOne(chunk, function(err, result) {
        assert.equal(err, null);
        console.log("Inserted a document into the collection.");
        callback();
    });
};
MongoClient.connect('mongodb://localhost:27017/test', function(err, db) {
    assert.equal(null, err);
    insertDocument(db, function() {
        db.close();
    });
});

如果你需要一个ObjectId的纯JavaScript对象,你可以使用下面的库。

https://www.npmjs.com/package/objectid-purejs