为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 JavaScript 中使用任意多个文档反序列化转储的 BSON?

如何在 JavaScript 中使用任意多个文档反序列化转储的 BSON?

拉丁的传说 2021-06-28 10:23:23
我有一个BSON来自mongoexport数据库的文件。让我们假设数据库是todo,集合是items。现在我想将数据离线加载到我的 RN 应用程序中。由于集合可能包含任意多个文档(目前假设为 2 个),我想使用一种方法来解析文件,无论它包含多少个文档。我尝试了以下方法:使用外部bsondump可执行文件。我们可以JSON使用外部命令将文件转换为bsondump --outFile items.json items.bson但是我正在开发一个移动应用程序,因此在 shell 命令中调用第三方可执行文件并不理想。另外,输出包含几行单行 JSON objects,因此输出在技术上不是正确的 JSON 文件。所以事后解析并不优雅。使用deserialize在js-bson库根据js-bson文档,我们可以做const bson = require('bson')const fs = require('fs')bson.deserialize(fs.readFileSync(PATH_HERE))但这会引发错误Error: buffer length 173 must === bson size 94并通过添加此选项,bson.deserialize(fs.readFileSync(PATH_HERE), {    allowObjectSmallerThanBufferSize: true})错误已解决,但仅返回第一个文档。因为文档没有提到这个函数只能解析1个文档的集合,不知道有没有什么选项可以实现多文档阅读。使用deserializeStream中js-bsonlet docs = []bson.deserializeStream(fs.readFileSync(PATH_HERE), 0, 2, docs, 0)但是此方法需要文档计数的参数(此处为 2)。使用bson-stream图书馆我实际上使用的是react-native-fetch-blob代替fs,并且根据他们的文档,流对象没有pipe方法,这是bson-streamdoc 中演示的唯一方法。所以虽然这个方法不需要文档数量,但是我很困惑如何使用它。// fsconst BSONStream = require('bson-stream');fs.createReadStream(PATH_HERE).pipe(new BSONStream()).on('data', callback);// RNFetchBlobconst RNFetchBlob = require('react-native-fetch-blob');RNFetchBlob.fs.readStream(PATH_HERE, ENCODING).then(stream => {    stream.open();    stream.can_we_pipe_here(new BSONStream())    stream.onData(callback)});另外我不确定ENCODING上面的内容。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 220 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信