Tag: bson

如何从mongodb导出数据子集

我目前有一个大型数据库,我需要一种备份数据的子集,然后可以导入另一个MongoDB实例的手段。 例如,我需要find包含关键字的所有文档,所以本质上是:find({key:'somekey'}),然后导出该数据集。 我想只是在NodeJS中运行查询,并以JSON格式保存数据。 我不认为这是最佳的,因为通过我的理解,简单地再次导入JSON数据(如果将来需要的话)将不会是一个简单的任务,因为数据types将会丢失。 所以我的问题是,我将如何导出数据集的一个子集,以便它可能被重新导入另一台服务器上的另一个MongoDB实例。

使用ObjectID与jwt.sign()和verify()

login到我的系统后,我通过jsonwebtoken的sign方法运行login用户的MongoDB _id 。 它返回给我一个散列,然后我把它放到客户端对我的服务器进行的每个后续请求的会话头中。 我现在想解码会话,并从头中恢复string_id ,所以我运行它对jsonwebtoken的verify方法。 我没有这样做的身份validation(这已经通过查看数据库中的会话处理)。 我正在恢复_id这样我就可以将用户的活动logging在一个单独的集合中。 我通过中间件运行verifyfunction,并将解码结果保存在req.decoded 。 但是,当我loggingreq.decoded ,它是一个BSON对象,而不是一个string: { _bsontype: 'ObjectID', id: { type: 'Buffer', data: [ 89, 128, 145, 134, 118, 9, 216, 20, 175, 174, 247, 33 ] }, iat: 1501903389, exp: 1501989789 } 我怎样才能从这个对象恢复_id值,以便我可以再次在我的集合中查找这个logging? 我试过了 我试过以下,没有成功: model.find(req.decoded).then()给我这个错误: 错误:对象[此处req.decoded的内容]不是有效的ObjectId model.find({_id: req.decoded})给了我这个错误: {CastError:对于model [model here]的path“_id”,Cast to ObjectId对于[req.decoded的内容] req.decoded.toString() logs [object […]

使用本地mongodb模块查询MongoDB中的bson字段

我有一个使用Mongo DB C#驱动程序的程序来填充文件的mongo集合。 如果我运行一个查找 client.connect('mongodb://127.0.0.1:27017/foo', function(err, db) { var things = db.collection('things'); things.find({}, ['ThingId']).limit(1).toArray(function(err, docs) { console.log(docs[0]); } } 看看存储的是什么,然后我看到类似的东西 {_id:1234235341234,ThingID:{_bsontype:'Binary',sub_type:3,position:16,buffer:<Buffer a2 96 8d 7f fa e4 a4 48 b4 80 4a 19 f3 32 df 8e>}} 我已经阅读了文档,并尝试如下的东西: console.log(mongojs.Binary(docs[i].SessionId.buffer, 3).value()); 但是我不能将ThingId作为UUIDstring打印到控制台 我绝对不能查询它! 我的目标是通过传递GUIDstring来查询,以便我可以使用Idsselect文档我知道生成的C#(可以看到使用RoboMongo) 任何帮助非常感谢! 更新:正如@ wes-widner指出的那样,mongo c#驱动程序团队有一个UUID助手js文件,它可以帮助在不同的UUID之间进行转换,我们可以在RoboMongo中直接使用它来查询。 但它使用的BinData仅在mongo shell中可用,而且我不知道如何使用节点访问它。 链接的答案显示了如何在使用mongo shell时使用uuidHelper和BinData进行查询,本质上我要问的是如何在节点

尝试使用带有GUID的C#持久化mongodb来读取nodejs中的数据

我已经看到了一些这方面的问题,但他们都没有直接解决这个问题。 所以情况是有一个基于C#的API,它将数据写入一个MongoDB实例,并使用一个GUID作为mongo中的_id ,所以例如: "_id" : new BinData(3, "+jscvebAl0+NO0n1WySLTQ=="), 所以假设它不会改变,它将永远是那种数据types,我无能为力。 所以在nodejs中,我读取的文档中包含一些与其他资源相关的UUID,但是当我使用nodejs 2.0驱动程序读取文档时,UUID vars被读作GUIDstring,如下所示: "someIdField": "c1489470-4e04-49ba-ae91-a20c009254e5" 所以,如果我直接使用{ "_id" : someIdField }它找不到匹配的文档,我假设它是因为它需要比较二进制表示,而不是string之一,但我似乎无法将该string变成有价值的东西。 我已经尝试使用npm uuid包parsing,然后像这样使用该缓冲区: var bytes = Uuid.parse(uuid); return new Binary(new Buffer(bytes), 3); 然而,这似乎并没有工作,我已经尝试了其他的解决scheme,包括base64编码,但似乎没有带回结果。 那么还有什么我需要在这里做的?

在Node.js中读取/写入二进制数据到MongoDB

我已经能够在Node.js中成功地将二进制数据(图像)写入MongoDB。 不过,我无法find清楚的文件来说明如何阅读。 以下是我将图像写入MongoDB的方法: var imageFile = req.files.myFile; var imageData = fs.readFileSync(imageFile.path); var imageBson = {}; imageBson.image = new db.bson_serializer.Binary(imageData); imageBson.imageType = imageFile.type; db.collection('images').insert(imageBson, {safe: true},function(err, data) { 我会很感激任何使用Node从Mongo读取图像的指针。 我假设有一个像“db.bson_deserializer …”的function。 谢谢!

Nodejs – 如何编译bsonparsing器?

每次我尝试在Nodejs中做任何事情,与mangodb或套接字连接什么,然后我收到错误: node.js:134 throw e; // process.nextTick error, or 'error' event on first tick ^ Native bson parser not compiled, please compile or avoid using native_parser=true 我应该编译,使用,安装等,以避免它? 我正在尝试安装mangodb,node-mongodb-native也是在node-mongodb-native安装过程中我得到的消息: cxx: bson.cc -> build/default/bson_1.o 所以可能我有一个地方… 我正在使用:节点0.4.7 Ubuntu 10.10 编辑。 我正在尝试运行: 我下载了github.com/pubsubio/chat 为这个项目安装打包的是: /home/mrok/nodejs/pubsub/pubsubio-chat ├── bson@0.0.3 ├── common@0.1.1 ├── galletita@0.1.1 ├── mongodb@0.9.6-7 ├─┬ mongojs@0.1.6 │ ├── common@0.1.1 │ └── […]

mongodb,node.js和encryption的数据

我正在做一个涉及大量encryption数据的项目。 基本上,这些是JSON对象序列化成一个string,然后用AES256encryption成一个Cyphertext,然后必须存储在Mongo中。 我当然可以按照上面描述的方式来做到这一点,它将把string的密文存储为一个BSON文档。 但是,这样,如果出于某种原因不能正确处理“连接字符”(例如,不同的字符集或任何原因),则会改变密文,并且不能重build原始string。 有数百万条logging,这是不可接受的(这也是缓慢的)。 有没有一种适当的方式来保存密码的某种本地二进制格式,检索它的二进制,然后将其返回到原始string? 我习惯于使用string,我的技能与二进制格式是相当生锈的。 我非常有兴趣听到你对这个主题的想法。 谢谢各位的意见, 法比安

是否有可能使Heroku与C ++ BSONparsing器一起安装mongodb NPM软件包?

在本地,我可以运行npm install –mongodb:native来获得npm来编译和安装C ++ BSONparsing器,但是我不能在Heroku上复制相同的操作。 我尝试添加一个预安装命令npm install mongodb –mongodb:native到package.json但npm在Heroku环境下的path上实际上并不可用。 查看mongodb包的源代码 ,看起来它正在寻找一个环境variables(由npm根据我猜想的命令行参数创build)。 也许有一种注入Heroku构build环境的方法? BSON(de)序列化正在成为我的应用程序的一大CPU +内存,而C ++parsing器有助于缓解这种情况。

为什么JSON比BSON更快?

阅读完这篇文章后 ,有一个引人注目的话: BSON也被devise为快速编码和解码。 例如,整数存储为32(或64)位整数,所以它们不需要从文本中parsing出来。 这对于小整数使用比JSON更多的空间, 但parsing起来要快得多 。 从我正在阅读的内容来看,使用BSON的全部重点是因为它对CPU的征税较less,编码/处理速度更快。 但是,我使用Node.js做了一些testing,并使用本机JSON方法将BSON吹出水面。 一些testing显示JSON速度快了3到5倍。 (当使用更多的数据types时,大约在6到8之间)。 基准代码: var bson = require('bson'); var BSON = new bson.BSONPure.BSON(); var os = require('os'); console.log(" OS: " + os.type() + " " + os.release() + " (" + os.arch() + ")"); console.log("RAM: " + os.totalmem() / 1048576 + " MB (total), " + os.freemem() […]

MongoDB不能更新文档,因为_id是string,而不是ObjectId

我正在做一个restapi在mongo数据库和一个web应用程序之间交换数据。 这些数据是json格式。 更新文档时遇到麻烦: cannot change _id of a document. 事实上,在我的JSON文档的_id存储为一个string,并作为一个string反序列化。 而它在mongo中作为ObjectID存储。 这就解释了为什么mongo会产生一个错误。 在mongo中:_id:ObjectId('51051fd25b442a5849000001') 在JSON中:_id:“51051fd25b442a5849000001” 为了避免这种情况,我手动将_id属性从一个string转换为一个ObjectID 。 但它看起来很丑陋,并会与其他BSONtypes失败。 问:有没有一种干净的方法来避免这种情况,或者做一个很好的JSON / BSON转换? 以下是我用来更新文档的代码。 我用本地驱动程序与express和mongodb使用nodejs。 exports.updateById = function(req, res) { var id = req.params.id; var map = req.body; map._id = new ObjectID.createFromHexString( map._id); // Manual conversion. How to avoid this??? console.log( 'Updating map: ' + id); console.log( 'Map: […]