Javascript MongoDB不必要的巨大平均文档大小

Javascript MongoDB不必要的巨大平均文档大小,javascript,typescript,mongodb,storage,Javascript,Typescript,Mongodb,Storage,我有一个MongoDB集合,在其中保存提交。这些提交的平均文档大小为3.6KB。 当我把这些承诺分成几份时 CommitPath { commit: Commit; path?: GitFile; // this is the representation of a file stored in the commit } 平均文档大小达到约53.9KB,或者进一步提交到约300KB。 对于提交中的每个文件,将创建一个CommitPath对象。CommitPath的平均文档大小应

我有一个MongoDB集合,在其中保存提交。这些提交的平均文档大小为3.6KB。 当我把这些承诺分成几份时

CommitPath {
    commit: Commit;
    path?: GitFile; // this is the representation of a file stored in the commit
}
平均文档大小达到约53.9KB,或者进一步提交到约300KB。 对于提交中的每个文件,将创建一个CommitPath对象。CommitPath的平均文档大小应与提交的大小大致相同,但肯定小于或等于2*sizeof(提交),因为CommitPath中存储的最多的内容已存储在提交中

我使用编译成JavaScript并使用nodejs运行的TypeScript应用程序计算提交路径。当我运行nodejs应用程序时,RAM内存中的CommitPaths总大小甚至没有存储在MongoDB中的那么大,这似乎非常可疑。我没有使用Mongoose,而是直接用MongoClient(npm包)保存对象

我想上传这两个集合,但我遇到“Path.changes剩余部分更改处的路径冲突”-尝试导出CommitPath集合时出错。 我已经读过了,但我仍然不明白到底是什么导致了这个问题


有人能解释一下为什么MongoDB会产生如此大的文档大小,为什么在导出集合时会出现此错误,以及如何解决此问题吗?分析文档有助于解决此问题。我用TypeScript分析了该集合,如下所示:

import * as bson from "bson" // npm i -D bson && npm i -D @types/bson
const client: MongoClient   = await MongoClient.connect(this.dbConfig.url, {useUnifiedTopology: true});
const db                    = client.db(this.dbConfig.dbName);
const collection            = db.collection(collectionName);
const dbContent             = await collection.find({}).toArray();

dbContent.forEach(doc => {
    const size = bson.calculateObjectSize(x);
    if (size > 100000) {
        console.log(doc)
    }
}
问题是,影响许多文件的提交比正常提交(Commit.files更大)大,对于这些提交中的每个文件,提交将完全存储在CommitPath对象中。平均文档大小大大大于提交数据库中的平均文档大小


我仍然不知道为什么MongoDBCompass无法导出集合,但它似乎与较大的平均文档大小无关。

您的问题中有多个问题。您应该能够使用mongo shell、compass、robo3t等来查看数据库中的文档,以了解它们为何较大。出口问题可能是一个单独的问题,但无论如何,我们需要更多的细节来帮助解决。