小编fhf*_*uih的帖子

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

我有一个BSON来自mongoexport数据库的文件。我们假设数据库是todo,集合是items。现在我想将数据离线加载到我的 RN 应用程序中。由于集合可能包含任意多个文档(目前假设有 2 个),因此我想使用一种方法来解析文件,无论它包含多少个文档。

我尝试过以下方法:

  1. 使用外部bsondump可执行文件。

JSON我们可以使用外部命令将文件转换为

bsondump --outFile items.json items.bson
Run Code Online (Sandbox Code Playgroud)

但我正在开发一个移动应用程序,因此在 shell 命令中调用第三方可执行文件并不理想。另外,输出包含多行单行 JSON 对象,因此从技术上讲,输出不是正确的 JSON 文件。所以事后解析并不优雅。

  1. deserializejs-bson图书馆使用

根据js-bson文档,我们可以这样做

const bson = require('bson')
const fs = require('fs')
bson.deserialize(fs.readFileSync(PATH_HERE))
Run Code Online (Sandbox Code Playgroud)

但这会引发错误

Error: buffer length 173 must === bson size 94
Run Code Online (Sandbox Code Playgroud)

并通过添加此选项,

bson.deserialize(fs.readFileSync(PATH_HERE), {
    allowObjectSmallerThanBufferSize: true
})
Run Code Online (Sandbox Code Playgroud)

错误已解决,但仅返回第一个文档。因为文档没有提到这个函数只能解析1个文档集合,所以我想知道是否有一些选项可以启用多个文档读取。

  1. 用于deserializeStreamjs-bson
let docs = []
bson.deserializeStream(fs.readFileSync(PATH_HERE), 0, 2, docs, …
Run Code Online (Sandbox Code Playgroud)

javascript mongodb node.js bson

4
推荐指数
1
解决办法
4883
查看次数

标签 统计

bson ×1

javascript ×1

mongodb ×1

node.js ×1